如何在HTTP头中设置用户代理

10

我正在尝试在C#中的GetWebRequest覆盖函数中设置http头部中的用户代理。

protected 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");

我试图向一个网站发送请求,但该网站告诉我需要一种方式来在出现问题时识别我们,"请确保您的请求包括'user-agent' http头。"他们已经给了我一个示例,但它使用了CURL。

curl_setopt($ch, CURLOPT_USERAGENT,'jeremy.fields@gmail.com)

你尝试使用“Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,像Gecko一样)Chrome/58.0.3029.96 afari/537.36”设置用户代理了吗? - Mohammad Joneidi
3个回答

4

User-agent代表着你的浏览器,例如Firefox或Chrome

通过将其转换为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");

2

如果您编写自己的应用程序请求http内容,最佳实践是在用户代理中设置任何形式的身份标识。它可以是电子邮件、网站或产品名称,如果广为人知。

根据HTTP规范中用户代理中的产品标记:

(…) 应该简短而到点。不得用于广告或其他非必要信息。虽然任何令牌字符都可以出现在产品版本中,但此令牌仅应用于版本标识符(即,相同产品的连续版本应只在产品值的产品版本部分有所不同)。

简单来说,它可以是以下其中一项

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)";

评论中的URL必须以+为前缀(由Brendon此答案中记录)。值得注意的是,任何邮件地址都应该发送给负责产品的公司或开发者,而不是使用它的用户。

如果您需要与现代浏览器兼容(如果您希望结果是HTML,而不是带有xml / json等API),您还可以添加“默认”Mozilla版本以及您的操作系统信息:

request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) MyAppName/1.0.0 (someone@example.com)"

最好发送正确的系统信息,而不仅仅是复制一个带有错误操作系统信息的找到的用户代理字符串。

0

我认为您正在错误地使用用户代理标头。来自MSDN的说明:

当您访问网页时,您的浏览器会向托管您正在访问的站点的服务器发送用户代理字符串。该字符串指示您正在使用的浏览器及其版本号以及有关您的系统的详细信息,例如操作系统和版本。Web服务器可以使用此信息提供针对您特定浏览器的内容。

该页面上的一个示例:

User-Agent:Mozilla/5.0(Windows NT 6.3; Trident/7.0; rv:11.0)like Gecko


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接