Internet explorer 为什么curl无法获得与ie浏览器相同的响应?

Internet explorer 为什么curl无法获得与ie浏览器相同的响应?,internet-explorer,curl,Internet Explorer,Curl,我有一个api,它的运行方式如下: 所以我想在我的ubuntu机器上用curl获得结果,然后我尝试以下方法: curl -v \ --header 'Accept: text/html, application/xhtml+xml, */*' \ --header 'Accept-Language: zh-CN' \ -A 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' \ --header 'Acc

我有一个api,它的运行方式如下:

所以我想在我的
ubuntu
机器上用
curl
获得结果,然后我尝试以下方法:

curl -v \
--header 'Accept: text/html, application/xhtml+xml, */*' \
--header 'Accept-Language: zh-CN' \
-A 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' \
--header 'Accept-Encoding: gzip, deflate' \
--header 'Host: 10.202.15.197:20176' \
--header 'DNT: 1' \
--header 'Connection: Keep-Alive' \
http://10.202.15.197:20176?user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1
curl -v \
--header 'Accept: text/html, application/xhtml+xml, */*' \
--header 'Accept-Language: zh-CN' \
-A 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' \
--header 'Accept-Encoding: gzip, deflate' \
--header 'Host: 10.202.15.197:20176' \
--header 'DNT: 1' \
--header 'Connection: Keep-Alive' \
http://10.202.15.197:20176 --data-urlencode 'user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1'

然后奇怪的事情发生了:正如你所看到的,我从ie浏览器中得到了完全不同的结果,所以我认为这一定是编码问题,然后我尝试以下方法:

curl -v \
--header 'Accept: text/html, application/xhtml+xml, */*' \
--header 'Accept-Language: zh-CN' \
-A 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' \
--header 'Accept-Encoding: gzip, deflate' \
--header 'Host: 10.202.15.197:20176' \
--header 'DNT: 1' \
--header 'Connection: Keep-Alive' \
http://10.202.15.197:20176?user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1
curl -v \
--header 'Accept: text/html, application/xhtml+xml, */*' \
--header 'Accept-Language: zh-CN' \
-A 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' \
--header 'Accept-Encoding: gzip, deflate' \
--header 'Host: 10.202.15.197:20176' \
--header 'DNT: 1' \
--header 'Connection: Keep-Alive' \
http://10.202.15.197:20176 --data-urlencode 'user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1'

但是没有,它返回相同的结果,我通过windows ie浏览器中的
fiddler
捕获我的请求,我得到请求数据:

GET http://10.202.15.197:20176/?user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1 HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 10.202.15.197:20176
DNT: 1
Connection: Keep-Alive
Pragma: no-cache


HTTP/1.0 200 OK
Content-Type: application/octet-stream
Connection: close
Content-Length: 222

<?xml version='1.0' encoding='GBK'?>
<addrSplitInfo>
<status>0</status><as_info prop="1" level="1">广东省</as_info>
<as_info prop="1" level="2">深圳市</as_info>
<as_info prop="3" level="18">宝安</as_info>
</addrSplitInfo>
GEThttp://10.202.15.197:20176/?user_id=1&query_type=GEOSPLIT&address=广东省深圳市宝安&ret_splitinfo=1 HTTP/1.1
接受:text/html、application/xhtml+xml、*/*
接受语言:zh CN
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;rv:11.0)像Gecko
接受编码:gzip,deflate
主持人:10.202.15.197:20176
DNT:1
连接:保持活力
Pragma:没有缓存
HTTP/1.0 200正常
内容类型:应用程序/八位字节流
连接:关闭
内容长度:222
0广东省
深圳市
宝安

我对这一现象做了进一步的研究(参见)。原因是
IE浏览器
将使用
GBK
作为默认编码,同时
Chrome
Firefox
cURL
python请求
只需使用
UTF-8
编码即可

下面是使用此API的解决方案:

使用
cURL

echo "http://10.202.15.197:20176\?user_id\=1\&query_type\=GEOSPLIT\&address\=广东省深圳市宝安\&ret_splitinfo\=1" | iconv -f utf-8 -t gbk | xargs curl
使用
python请求

payload = {"user_id": 1, "query_type": "GEOSPLIT", "address": u"广东省深圳市宝安".encode('gbk'), "ret_splitinfo": 1}
r = requests.get("http://10.202.15.197:20176", payload)
print r.text

嗨,提示:Fiddler使用代理连接。。。。在IE的网络设置中关闭代理。