我试图在C#
中的覆盖函数GetWebRequest中的http头中设置user-agentprotected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.HttpWebRequest request = base.GetWebRequest(uri) as System.Net.HttpWebRequest;
request.Headers.Add("User-Agent", (someone@yahoo.com"));
request.ProtocolVersion = System.Net.HttpVersion.Version10;
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
request.KeepAlive = false;
return request;
}
我的请求被返回时出现错误,我被告知他们没有看到用户代理。我已经尝试过设置标头用户代理的其他方法,但到目前为止还没有任何工作。我尝试过的其他一些方法是
request.Headers["User-Agent"] = "someone@yahoo.com");
request.UserAgent = "someone@yahoo.com";
request.Headers.Set("User-Agent", "someone@yahoo.com");
我尝试发送请求的网站告诉我,如果出现问题需要一种方法来识别我们,并且请确保您的请求包含"用户代理" http标题。"他们给我发了一个例子,但它正在使用CURL
curl_setopt($ch, CURLOPT_USERAGENT,'jeremy.fields@gmail.com)
答案 0 :(得分:1)
用户代理代表您的浏览器,如Firefox或Chrome
通过将HttpWebRequest强制转换为HttpWebRequest来使用HttpWebRequest上的UserAgent属性
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "my user agent";
或
request = new HttpClient();
request.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");
答案 1 :(得分:0)
我认为您错误地使用了User-Agent标头。来自MSDN:
当您访问网页时,您的浏览器会将用户代理字符串发送到 托管您正在访问的网站的服务器。这个字符串 表示您正在使用的浏览器,版本号和详细信息 关于您的系统,例如操作系统和版本。网络 服务器可以使用此信息来提供定制的内容 为您的特定浏览器。
该页面的一个例子:
User-Agent:Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0)之类的 壁虎
答案 2 :(得分:0)
如果您编写自己的请求HTTP内容的应用程序,则最佳做法是在用户代理中设置任何形式的标识。如果众所周知,可以是电子邮件,网站或产品名称。
根据HTTP specification用户代理中的产品令牌:
(...)应该简短明了。他们一定不能 用于广告或其他非必要信息。虽然有 令牌字符可能出现在产品版本中,此令牌应 仅用于版本标识符(即, 同一产品应该只在产品版本部分有所不同 产品价值)。
最简单的形式可以是以下的一个:
request.UserAgent = "MyAppName/1.0.0";
request.UserAgent = "MyAppName/1.0.0 (someone@example.com)";
request.UserAgent = "MyAppName/1.0.0 (+http://www.example.com)";
评论网址必须以+
为前缀(this answer在Brendon中有记载)。同样值得注意的是,任何邮件地址都应发给负责该产品的公司或开发人员,而不是发给使用该产品的用户。
如果您需要与现代浏览器兼容(如果您希望结果为HTML,而不是具有xml / json / etc的API),则还可以添加“默认” Mozilla版本以及您的操作系统信息:
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) MyAppName/1.0.0 (someone@example.com)"
即使您要发送的信息也最好发送正确的信息,而不仅仅是复制找到的具有错误操作系统信息的用户代理字符串。