C#模拟http请求出错,求大神帮忙
public static Result doGet(string url, Dictionary<string, string> param, CookieCollection cookies)
{
StringBuilder sbParam = new StringBuilder("?");
if (param != null)
{
foreach (KeyValuePair<string, string> kvp in param)
{
sbParam.Append(kvp.Key + "=" + kvp.Value + "&");
}
}
url = url + (null == param ? "" : sbParam.ToString().Substring(0, sbParam.Length - 1));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//上面的http头看情况而定,但是下面俩必须加
request.KeepAlive = true;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
request.CookieContainer = new CookieContainer();
if (cookies != null)
{
request.CookieContainer.Add(cookies);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, encoding);
string retString = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
Result r = new Result();
r.Cookie = response.Cookies;
r.ResString = retString;
return r;
}
我用这个方法请求一个地址获得COOKIE然后在第二次请求的时候把COOKIE放进去。但是每次都提示没有COOKIE
第一个是http请求,第二个是https请求。
这个有关系么?求解 --------------------编程问答-------------------- 用fiddler看看在网页面上正常情况下是如何的,
如果中间有302跳转,导致cookie没有回传回来的 --------------------编程问答--------------------
我第一个请求就是进入http://www.baidu.com/
获得百度的一个COOKIE然后用这个COOKIE进入百度的另一个页面
https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true
如果login_token如果有值就那cookie传入正确,但是每次都提示the fisrt two args should be string type:0,1! --------------------编程问答-------------------- 问琪琪大妈啊 --------------------编程问答-------------------- 这货说忘了 --------------------编程问答--------------------
顶一下,等大神 --------------------编程问答--------------------
这是技术区,水货小心删你贴 --------------------编程问答-------------------- 顶一下 ,没做过web
--------------------编程问答-------------------- http://blog.csdn.net/archerluke/article/details/6310893 --------------------编程问答-------------------- 人工撑起 --------------------编程问答--------------------
这个cookie获得好像不全
BDSVRTM=0; H_PS_PSSID=3784_4199_1434_4321_4414_4263_4450
另一个Java程序获得的COOKIE
BAIDUID=3ED25B738DA43F24CC0482CD03B23CAE:FG=1;BDSVRTM=0;H_PS_PSSID=1464_4420_4415_4405_4263_445
--------------------编程问答-------------------- cookie有有效期和域的限制,这两个非常重要,你必须单独处理,而不能直接拿上次获取的cookie用在下次。 --------------------编程问答--------------------
cookie获得后马上就使用的,而且从百度拿到了,第二个页面也是百度的。
我用JavaSE使用没有问题。
C#我不知道错在哪里 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
你确定第二个页面的地址没有给错吗?我怎么不管是否登录,打开那个页面都是给我输出一段代码文字,这让我如何测试? --------------------编程问答--------------------
要清空cookie,然后直接打开页面就会提示,打开那个页面需要百度的一个COOKIE --------------------编程问答-------------------- 我清空了Cookie的,但是打开的时候,百度会自动分配我2个cookie,打开也没有报错,如果不情况的话,我能查到5个cookie,清空后也可以打开,临时分配我2个cookie而已,而且不论是否清空cookie,打开看到的效果一样(谷歌浏览器测试的)。我想我没必要为了查看cookie的情况,单独写段程序吧,直接浏览器调试效果更好,更能说明情况。 --------------------编程问答-------------------- 好好学习,天天向上 --------------------编程问答-------------------- 原来那个页面是作为jsonp的方式返回的,难怪看起来都是代码,怪怪的。
可以确定一点,你必须提供BAIDUID和H_PS_PSSID这两个Cookie,也只需要这两个,不要多余的。另外这两个Cookie的所属域必须是.baidu.com,不能带www,因为那个涉及到跨域传递Cookie,从www.baidu.com的传递到passport.baidu.com --------------------编程问答--------------------
cookie有有效期和域的限制,这两个非常重要,你必须单独处理,而不能直接拿上次获取的cookie用在下次。
cookie获得后马上就使用的,而且从百度拿到了,第二个页面也是百度的。
我用JavaSE使用没有问题。
C#我不知道错在哪里
既然java能用,为什么还要搞另一种? --------------------编程问答-------------------- --------------------编程问答--------------------
顶一下,等大神
这是技术区,水货小心删你贴
我就是通过这句话的20分的 --------------------编程问答--------------------
顶一下,等大神
这是技术区,水货小心删你贴
我就是通过这句话的20分的
你已经50分了
顶一下,等大神
这是技术区,水货小心删你贴
我就是通过这句话的20分的
你是说可用分啊 --------------------编程问答--------------------
你已经50分了
顶一下,等大神
这是技术区,水货小心删你贴
我就是通过这句话的20分的
用不用我帮你把这个问题解决一下 --------------------编程问答--------------------
你已经50分了
顶一下,等大神
这是技术区,水货小心删你贴
我就是通过这句话的20分的
用不用我帮你把这个问题解决一下
解决了有砖厂 --------------------编程问答-------------------- string ckstr = response.Header["Set-Cookie"];
用这种方式 取一下Cookies 试试 --------------------编程问答--------------------
string ckstr = response.Header["Set-Cookie"];
用这种方式 取一下Cookies 试试
取cookie没有问题,问题在请求的时候怎么加入cookie,我不知道错哪了,加进去的时候好像少了,第一次请求得到了3个cookie,但是每次赋值的时候只有两个,少了一个BAIDUID的cookie --------------------编程问答-------------------- domain的问题 如果多个二级域名之间共享cookie,则设置domain=dipan.com 不要写 domain=sg7.dipan.com
string ckstr = response.Header["Set-Cookie"];
用这种方式 取一下Cookies 试试
取cookie没有问题,问题在请求的时候怎么加入cookie,我不知道错哪了,加进去的时候好像少了,第一次请求得到了3个cookie,但是每次赋值的时候只有两个,少了一个BAIDUID的cookie
添加cookie的时候,如果删除域名设置,直接报错,因为它不是简单的添加,而是要验证域名是否一致,因此你需要自己判断那个域名,并修改到一致的域名上再添加,我11楼已经提醒过你有域的限制,你却不当回事,18楼更是指出了域的实际内容,你还看不懂问题所在吗?
我错啦,待会我就去改。大神不要动怒 --------------------编程问答-------------------- 你的cookie用错了
CookieContainer cookieContainer=new CookieContainer();
HttpWebRequest hp = null;
//把cookie放入当次请求中
hp.CookieContainer = this.cookieContainer;
//响应后把cookie存起来,以便下次请求时用
HttpWebResponse wr = (HttpWebResponse)hp.GetResponse();
cookieContainer.Add(wr.Cookies); --------------------编程问答-------------------- 妖孽,还不快快结贴 --------------------编程问答-------------------- --------------------编程问答-------------------- 将cookie 根据分号,分割成多组;然后分别依次加入 --------------------编程问答--------------------
妖孽,还不快快结贴
还没搞完,急个毛线 --------------------编程问答--------------------
你的cookie用错了
CookieContainer cookieContainer=new CookieContainer();
HttpWebRequest hp = null;
//把cookie放入当次请求中
hp.CookieContainer = this.cookieContainer;
//响应后把cookie存起来,以便下次请求时用
HttpWebResponse wr = (HttpWebResponse)hp.GetResponse();
cookieContainer.Add(wr.Cookies);
我第一次请求的时候有把cookie存到一个对象里,第二次请求的是有有add(cookie)不过CookieContainer 不是同一个这个有关系? --------------------编程问答--------------------
添加cookie的时候,如果删除域名设置,直接报错,因为它不是简单的添加,而是要验证域名是否一致,因此你需要自己判断那个域名,并修改到一致的域名上再添加,我11楼已经提醒过你有域的限制,你却不当回事,18楼更是指出了域的实际内容,你还看不懂问题所在吗?
域名我已经看过了哪两个都是.baidu.com,所以不是cookie的问题,是C#代码某个地方错啦 --------------------编程问答--------------------
你的cookie用错了
CookieContainer cookieContainer=new CookieContainer();
HttpWebRequest hp = null;
//把cookie放入当次请求中
hp.CookieContainer = this.cookieContainer;
//响应后把cookie存起来,以便下次请求时用
HttpWebResponse wr = (HttpWebResponse)hp.GetResponse();
cookieContainer.Add(wr.Cookies);
我第一次请求的时候有把cookie存到一个对象里,第二次请求的是有有add(cookie)不过CookieContainer 不是同一个这个有关系?
当然要用同一个啦,因为你第二次请求想用第一次请求的会话
补充:.NET技术 , C#