ADURL简化程序
using System;
using System.Diagnostics;
using System.Net;
using System.Text;
using System.Web;
using System.Linq;
using System.IO;
using System.Collections.Generic;
namespace AdUrlConvert
{
class Program
{
public static string Finalurl;
public static string getProxyIP = System.Configuration.ConfigurationManager.AppSettings["proxyIP"];
public static int getproxyPORT = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["proxyPORT"]);
public static string getinputCsvPath = System.Configuration.ConfigurationManager.AppSettings["inputCsvPath"];
public static string getoutputCsvPath = System.Configuration.ConfigurationManager.AppSettings["outputCsvPath"];
static void Main(string[] args)
{
readUrlCsv();
}
public static string GetFinalAdUrl(string finlurl, string url)
{
try
{ Finalurl = finlurl;
string result = string.Empty;
HttpWebRequest request = WebRequest.Create(finlurl) as HttpWebRequest; //第一步:用工厂机制(factory mechanism)通过Create()方法来创建一个HttpWebRequest对象。
request.AllowAutoRedirect = false; // 获取或设置一个值,该值指示请求是否应跟随重定向响应。
WebProxy proxy = new WebProxy(getProxyIP, getproxyPORT);
request.Proxy = proxy;
HttpWebResponse response = request.GetResponse() as HttpWebResponse; //第二步:调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象 while (response.Headers["Location"] != null)
{
try
{
Finalurl = response.Headers["Location"];
response.Close();
request = WebRequest.Create(Finalurl) as HttpWebRequest;
request.AllowAutoRedirect = false;
request.Referer = Finalurl;
response = request.GetResponse() as HttpWebResponse;
}
catch (Exception x)
{
Finalurl = "null";
LogHelper.WriteLog(typeof(Program), string.Format("今行ってURL:{0} 詳しい内容は {1}", url, x.Message));
break;
} }
LogHelper.WriteLog(typeof(Program), string.Format("今行ってURL:{0} 詳しい内容は {1}", url, "Finalurl:" + Finalurl)); response.Close();
}
catch (Exception ex)
{ LogHelper.WriteLog(typeof(Program), string.Format("今行ってURL:{0} 詳しい内容は {1}", url, ex.Message));
}
return Finalurl; #region 源码的获取
//Stream sr = response.GetResponseStream(); //从Internet资源返回数据流
//if (sr != null)
//{
// StreamReader reader = new StreamReader(sr, Encoding.UTF8); //读取数据流
// result = reader.ReadToEnd();
// reader.Close();
// sr.Close();
// request.Abort();
// response.Close();
//}
//url = response.Headers["Location"];
//response.Close(); //request = WebRequest.Create(url) as HttpWebRequest;
//request.AllowAutoRedirect = false;
//request.Referer = url;
//response = request.GetResponse() as HttpWebResponse;
//url = response.Headers["Location"];
//response.Close(); //request = WebRequest.Create(url) as HttpWebRequest;
//request.AllowAutoRedirect = false;
//request.Referer = url;
//response = request.GetResponse() as HttpWebResponse;
//url = response.Headers["Location"];
//response.Close();
//Console.WriteLine(url);
#endregion 源码的获取 } public static void readUrlCsv()
{
string path = getinputCsvPath;
UrlList ul = new UrlList();
ul.Finalurl = new List<string>();
ul.Finalurl.Add("最終URL");
ul.ADurlList = File.ReadAllLines(path, Encoding.UTF8).ToList();
int index = 1;
// 循环访问一遍 ul.ADurlList.Skip(1).ToList().ForEach(x =>
{
ul.Finalurl.Add(GetFinalAdUrl(ul.ADurlList[index],ul.ADurlList[index]));
index++;
});
// 对出错的重新访问
index = 1; ul.ADurlList.ForEach(x =>
{
if (ul.Finalurl[index] == null)
{
ul.Finalurl[index] = GetFinalAdUrl(ul.ADurlList[index], ul.ADurlList[index]);
index++;
}
});
index = 0;
// 生成最终的csv for (int i = 0; i < ul.ADurlList.Count; i++)
{
ul.ADurlList[i] += "," + ul.Finalurl[i];
}
File.WriteAllLines(getoutputCsvPath, ul.ADurlList);
}
}
}
ADURL简化程序的更多相关文章
- 利用freopen()函数和fc命令简化程序调试
大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...
- C与C++中的常用提高程序效率的方法
1.用a++和++a及a+=1代替a=a+1,用a--和--a及a-=1代替a=a-1 通常使用若把一个函数定义为内联函数,则在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代 ...
- C/C++程序员应聘试题剖析(转载)
转载自:http://www.cnitblog.com/zouzheng/articles/21856.html 1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面 ...
- 程序猿,千万别说你不了解Docker!
放在两年前,你不认识Docker情有可原.但如果现在你还这么说,不好意思,我只能说你OUT了.你最好马上get起来,因为有可能你们公司很快就会引入Docker. 今天就和大家讨论讨论这个备受好评的应用 ...
- linux c程序中获取shell脚本输出的实现方法
linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...
- matlab练习程序(矩形变换为单连通形状)
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...
- Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)
(该博文为原创,转载请注明出处 http://www.cnblogs.com/luyijoy/ by白手伊凡) 1. 基本概念 1) Java为解释性语言,运行过程:程序源 ...
- [转]100个经典C语言程序(益智类问题)
目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事 ...
- 【转】C/C++程序员应聘常见面试题深入剖析
1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵.文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见. 许多面试题看似简单,却需要深厚的基 ...
随机推荐
- sql 跨库查询备忘笔记
select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 inse ...
- HTML 代码复用实践 (静态页面公共部分提取复用)
原文:HTML 代码复用实践 上面的链接里面安装配置步骤已经非常详细,这里主要记录我操作过程中遇到的几个问题 gulp-file-include 的使用 按上面的步骤安装之后,node_mod ...
- keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法
在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...
- 代码安装apk文件
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri = Uri.fromFile(file); in ...
- php判断是否是微信客户端的浏览器访问
代码: $user_agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_agent, 'MicroMessenger') === false) ...
- Linux常见命令
du -sh 查看当前文件夹大小 tail -f /var/log/nginx/access.log 查看日志 vsFTPd Linux上面的ftp df -lh 查看磁盘 df -i 查看inode ...
- Stanford NLP 学习笔记2:文本处理基础(text processing)
I. 正则表达式(regular expression) 正则表达式是专门处理文本字符串的正式语言(这个是基础中的基础,就不再详细叙述,不了解的可以看这里). ^(在字符前): 负选择,匹配除括号以外 ...
- 超链接实现post方式提交
思路:如果想要超链接实现post方式提交,必须借助表单.下面得两种方式,一种是借助显示的form表单,一种是借助隐式的form表单方式一:将超链接放到一个form表单中,或者超链接本身就在一个form ...
- POJ 1741 [点分治][树上路径问题]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵有n个节点的树,每条边都有一个正权值,求一共有多少个点对使得它们之间路的权值和小于给定的k. 思路: <分治算法在树的路径问题中的应用 ...
- 编译器zynq设置环境变量
设置临时环境变量export CROSS_COMPILE=arm-xilinx-linux-gnueabi- export PATH=/work/tool/cross_compiler/bin:$PA ...