none
WebBrowser如何 User-Agent 、referer 等header信息? RRS feed

  • 问题

  • 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 开发相关讨论)
    2009年1月6日 6:19

全部回复

  • 我觉得你应该是不能在BeforeNavigate2事件里面改变Headers,因为这个Headers应该是AdditionalHeaders,而不是整个IE发送出去的Http Header。

     

    这个AdditionalHeaders是通过WebBrowser.Navigate(
        Uri url,
        string targetFrameName,
        byte[] postData,
        string additionalHeaders
    )传递的。

     

    另外,我并不觉得WebBrowser控件提供了接口让你修改User-Agent、referer这些信息:

    1. 很多网站都依赖User-Agent来执行一些脚本操作
    2. Referer是Http协议里面定义好的,根据Web服务器的Http响应而生成的。

    如果要修改的话,你只能自己编码生成一个Http数据包,就像WebClient类那样。

    2009年1月6日 7:54


  • 问题没有解决,顶
    2009年1月6日 9:57
  • DISPID_AMBIENT_USERAGENT
    2009年1月6日 16:56
  • 没有更简单的方法吗??
    2009年1月9日 6:46
  •  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.

    2009年1月9日 9:52