Google Places API浏览器调用有结果,代码调用返回零结果的原因
可能导致结果不一致的原因分析
我帮你梳理几个最可能的原因,你可以逐一排查:
1. URL中的转义字符问题
你提供的URL里包含&,这是HTML中对&的转义字符。在浏览器地址栏输入时,浏览器会自动把&解析成实际的&来分隔参数;但你的代码里直接使用这个URL字符串的话,&会被当作URL的一部分发送给API,导致region=IT和key=api_key这些参数没有被正确识别——API会把它们当成前一个参数的后缀,自然找不到匹配的结果。
解决方法:把URL里的所有&替换成&,确保参数分隔符正确。
2. 请求头差异(尤其是User-Agent)
浏览器发送请求时会带上标准的User-Agent头,标识自己是合法的浏览器客户端;而WebClient默认发送的User-Agent是比较老旧的标识,Google Places API可能会对这种非浏览器的请求做不同的处理,甚至返回空结果。
解决方法:手动给WebClient设置一个模拟浏览器的User-Agent:
WebClient wsClient = new WebClient(); wsClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); Stream stream = wsClient.OpenRead(url); // 后续代码不变
3. 编码问题(可能性较低,但值得检查)
虽然你的query参数用了+代替空格,这在URL中是合法的,但有些HTTP客户端可能会对特殊字符的处理和浏览器不一致。你可以尝试用Uri.EscapeUriString()对整个URL进行编码,确保所有特殊字符都符合标准:
string encodedUrl = Uri.EscapeUriString(originalUrl); Stream stream = wsClient.OpenRead(encodedUrl);
优先检查第一个问题(&替换成&),这是最常见的导致参数失效的原因。
内容的提问来源于stack exchange,提问作者Daniele Z.
相关产品推荐
相关产品推荐

