解析Python中的User-Agent字符串以便可靠地检测的最佳方法是什么
或者也许是任何帮助库
导航到http://whatsmyuseragent.com/向我显示运行4.2.1的Galaxy Nexus上我的股票Android浏览器有用户代理
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
Run Code Online (Sandbox Code Playgroud)
此用户代理中没有任何内容允许我唯一地检测到它是一个Android浏览器.Chrome for Android应用程序至少具有androidUA功能.有什么方法可以让我发现Android应用程序的存量吗?
我试图在Winforms应用程序中更改WebBrowser控件的UserAgent.
我已成功使用以下代码实现此目的:
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(
int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
const int URLMON_OPTION_USERAGENT = 0x10000001;
public void ChangeUserAgent()
{
List<string> userAgent = new List<string>();
string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";
UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是这只能工作一次.当我尝试第二次运行ChangeUserAgent()方法时,它不起作用.它保持设置为第一个更改的值.这很烦人,我已经尝试了一切,但它不会改变不止一次.
有谁知道一种不同的,更灵活的方法?
谢谢
当我运行此命令时:
wget --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" http://yahoo.com
Run Code Online (Sandbox Code Playgroud)
...我得到了这个结果(文件中没有其他内容):
<!-- hw147.fp.gq1.yahoo.com uncompressed/chunked Wed Jun 19 03:42:44 UTC 2013 -->
Run Code Online (Sandbox Code Playgroud)
但是当我wget http://yahoo.com无--user-agent选择地运行时,我得到整页.
用户代理与我当前浏览器发送的标头相同.为什么会这样?有没有办法确保用户代理在使用wget时不会被阻止?
我正在开发一个使用HTTP与内部Web服务通信的应用程序.
是否有自定义用户代理字符串的"最佳实践",以便我可以在我的应用程序中添加一个好的?它是一个Python库,较低的传输是Python自己的httplib.用户代理字符串是否应该说明或其他什么?
如何使HTTPClient使用自定义User-Agent标头?
以下代码提交空用户代理.我错过了什么?
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
public class TestHTTP {
public static void main(String[] args) throws ClientProtocolException, IOException {
HttpGet request = new HttpGet("http://tool.keepmeapi.com/echo");
HttpContext HTTP_CONTEXT = new BasicHttpContext();
HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13");
request.setHeader("Referer", "http://www.google.com");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request, HTTP_CONTEXT);
if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 400) { …Run Code Online (Sandbox Code Playgroud) 我尝试使用Python的urllib获取维基百科文章:
f = urllib.urlopen("http://en.wikipedia.org/w/index.php?title=Albert_Einstein&printable=yes")
s = f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)
然而,而不是HTML页面,我得到以下响应:错误 - 维基媒体基金会:
Request: GET http://en.wikipedia.org/w/index.php?title=Albert_Einstein&printable=yes, from 192.35.17.11 via knsq1.knams.wikimedia.org (squid/2.6.STABLE21) to ()
Error: ERR_ACCESS_DENIED, errno [No Error] at Tue, 23 Sep 2008 09:09:08 GMT
Run Code Online (Sandbox Code Playgroud)
维基百科似乎阻止了不是来自标准浏览器的请求.
有谁知道如何解决这个问题?
我知道使用户代理提示更加模糊的部分目的是为了使浏览器指纹识别更加困难。
我自己的(Windows 桌面)Chrome 发送标头:
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
sec-ch-ua: "Chromium";v="86", "\"Not\\A;Brand";v="99", "Google Chrome";v="86"
sec-ch-ua-mobile: ?0
Run Code Online (Sandbox Code Playgroud)
我不明白的是:
\"和\\A;里面的字符串?我唯一的猜测是,这应该以某种方式与解析器混淆(就像 CSS 中的反 IE 黑客),但这似乎是一个相当奇怪的目的——而 IIRC,\A就是钟形字符。user-agent具有特定版本号的完整标头,这应该如何实现用户代理提示歧义?user-agent字符串是 Chrome 特有的。它是否有来自其他浏览器的某种嵌入式组件?你如何解析你的用户代理字符串?我想得到:
来自用户代理字符串.我的应用程序是用perl编写的,之前使用的是HTTP :: BrowserDetect.它有点陈旧,不再维护.(编辑:它已被更新.)我与使用perl进行实际查找无关.
我得出的结论是,自动解析是一个失败的原因.我正在考虑编写一个crud类型的应用程序,向我展示一个未分类的UA列表并手动保持它们是最新的.
这样的资源是否已经存在,我可以利用?如果我可以进行HTTP调用以查找用户代理信息,那将是非常棒的.
谢谢!
有没有人知道java中的一个很棒的库来解析用户代理字符串?我们写了一个自定义的,但这似乎是许多人的常见问题.我猜可以在某个地方找到一个好的图书馆.
例如,用户代理字符串......
"Mozilla/5.0(Windows; U; Windows NT 6.0; en-US)AppleWebKit/532.0(KHTML,如Gecko)Chrome/3.0.195.21 Safari/532.0"
...在我们的网站上使用Chrome加密宣告Windows Vista PC的到来.
我在python和ruby中看过库.在那里的任何东西?
user-agent ×10
http ×3
java ×2
python ×2
web-services ×2
android ×1
c# ×1
client-hints ×1
http-headers ×1
parsing ×1
privacy ×1
urllib2 ×1
wget ×1
wikipedia ×1
winforms ×1