Rus*_*ell 6 google-app-engine http-headers urlfetch google-app-engine-python
我有一个谷歌应用引擎(GAE)的应用程序,我使用的是Python 2.7.此应用程序从用户门户(例如Chrome)接收GET(ajax)请求.收到请求后,我准备异步连接,使用urlfetch.make_fetch_call() - GET请求从GAE外部的多个网站(比如X1,X2等)请求数据.
这适用于X1网站,但不适用于X2.开始在本地开发服务器上进行探测.在探究时我怀疑X2正在检查标题中的{'User-Agent':'Python-urllib/2.7'}标记.这是我最好的猜测,因为将此字段更改为{'User-Agent':'Mozilla/5.0'}会返回所需的结果.
所以我将代码上传到GAE并使用urlfetch.make_fetch_call()启动了该过程.在拦截此调用后,我发现无论我做什么,GAE添加的默认标头都不会被删除. 这是GAE添加的默认标题.
302 218ms 0kb Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/48.0.2564.103 Safari/537.36 AppEngine-Google; (+ http://code.google.com/appengine ; appid:s~xxx-etching-112014)module = default version = 1 107.178.194.96 - [06/Feb/2016:19:57:04 -0800] "GET/HTTP/1.1"302 383" http://www.mywebbsite.com/ ""Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/48.0.2564.103 Safari/537.36 AppEngine -Google;(+ http://code.google.com/appengine ; appid:s~xxx-etching-112014)""1.usedForIntercepting.appspot.com"ms = 218 cpu_ms = 224 cpm_usd = 0.000043 loading_request = 1 app_engine_release = 1.9.32 trace_id = fd7b7420e7f8c23371a5b0ea7e9651 instance = 00c61b117ce5ebac2a2eba44f26a01d4f2
这就是我尝试过的
for portal in self.searchPortals:
spoofHeader = {
'User-agent':'Mozilla/5.0----------------------',
'Host':portal.getURL(),
'Accept-Encoding': 'identity',
'Connection': 'close',
'Accept': 'application/json, text/plain, */*',
'Origin': 'http://www.mywebsite.com'
}
logging.info(spoofHeader)
rpc = urlfetch.create_rpc(deadline=5)
rpc.callback = lambda: self.handleCallBack(rpc, portal)
#urlfetch.make_fetch_call(rpc, portal.getSearchURL(searchKeyword), headers={'User-agent':'Mozilla/5.0'})
urlfetch.make_fetch_call(rpc, url='http://1.usedforintercepting.appspot.com', headers=spoofHeader)
rpcs.append(rpc)
for rpc in rpcs:
rpc.wait()
Run Code Online (Sandbox Code Playgroud)
这就是我收到的.
2016-02-07 13:01:21.306/302 59ms 0kb Mozilla/5.0 ---------------------- AppEngine-Google; (+ http://code.google.com/appengine ; appid:s~xxx-etching-112014)module = default version = 1 107.178.194.20 - [06/Feb/2016:23:31:21 -0800] "GET/HTTP/1.1"302 383 - "Mozilla/5.0 ---------------------- AppEngine-Google;(+ http://code.google. com/appengine ; appid:s~xxx-etching-112014)""1.usedForIntercepting.appspot.com"ms = 59 cpu_ms = 6 cpm_usd = 0.000043 app_engine_release = 1.9.32 trace_id = a4a1f521c5a6fa65ed0295835dd175 instance = 00c61b117ce5ebac2a2eba44f26a01d4f2
我想要的是这样的.
GET http:// somelink/search/abc HTTP/1.1 Accept-Encoding:identity主机:somelink.com连接:close用户代理:Mozilla/5.0
注意 - 为了拦截使用urlfetch从GAE做出的请求,我正在使用另一个GAE实例.
在文档URL Fetch Python API Overview: Request Headers 中,它说
出于安全原因,应用程序无法修改以下标头:
- 内容长度
- 主持人
- 各不相同
- 通过
- X-Appengine-入站-Appid
- X-转发-For
- X-代理用户-IP
它还说:
以下标头指示请求应用程序的应用程序 ID:
User-Agent。可以修改此标头,但 App Engine 将附加标识符字符串以允许服务器识别 App Engine 请求。附加字符串的格式为"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)",其中APPID是您的应用程序的标识符。
如果您想要自定义标头,则必须编写自己的 urlfetch 代码或使用外部服务器通过您的标头进行调用。
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |