询问者
WebBrowser如何 User-Agent 、referer 等header信息?

问题
-
WebBrowser如何 User-Agent 、referer 等header信息?
我搜到一些资料,说是可以通过WebBrowser_BeforeNavigate2修改,但我还是改不了:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace postWebBrower
{
public partial class Form1 : Form
{
Boolean isSurePost;
SHDocVw.WebBrowser wb;
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("http://www.baidu.com");
wb = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
wb.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(WebBrowser_BeforeNavigate2);
}
private void Go_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(url.Text);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
private void webBrowser1_LocationChanged(object sender, EventArgs e)
{
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
Console.WriteLine(((WebBrowser)sender).Url);
Console.WriteLine(webBrowser1.Url);
Console.WriteLine((wb.LocationURL));
}
private void WebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags,ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
{
Console.WriteLine("wb url:"+URL);
Console.WriteLine("Headers:" + Headers); //获取不了完整的headers头?
string postDataText = System.Text.Encoding.ASCII.GetString(PostData as byte[]);
Console.WriteLine(postDataText);
Console.WriteLine("datas:");
}
}
}- 已移动 小鱼儿 2009年5月19日 9:46 ([Loc]From:Windows Vista 开发相关讨论)
全部回复
-
我觉得你应该是不能在BeforeNavigate2事件里面改变Headers,因为这个Headers应该是AdditionalHeaders,而不是整个IE发送出去的Http Header。
这个AdditionalHeaders是通过WebBrowser.Navigate(
Uri url,
string targetFrameName,
byte[] postData,
string additionalHeaders
)传递的。另外,我并不觉得WebBrowser控件提供了接口让你修改User-Agent、referer这些信息:
-
很多网站都依赖User-Agent来执行一些脚本操作
-
Referer是Http协议里面定义好的,根据Web服务器的Http响应而生成的。
如果要修改的话,你只能自己编码生成一个Http数据包,就像WebClient类那样。
-
-
DISPID_AMBIENT_USERAGENT
-
Sheng Jiang (蒋晟) 写: DISPID_AMBIENT_USERAGENT 根据MSDN的Knowledge Base里面的描述,好像用DISPID_AMBIENT_USERAGENT也不行的:
http://support.microsoft.com/kb/183412
MSHTML will also ask for a new user agent via DISPID_AMBIENT_USERAGENT when navigating to clicked hyperlinks. This ambient property can be overridden, but it is not used when programmatically calling the Navigate method; it will also not cause the userAgent property of the DOM's navigator object or clientInformation behavior to be altered - this property will always reflect Internet Explorer's own UserAgent string.