Tôi có một ứng dụng của Google App Engine (GAE) và tôi đang sử dụng Python 2.7. Ứng dụng này nhận được yêu cầu GET (ajax) từ cổng thông tin người dùng (nói Chrome). Khi nhận được yêu cầu, tôi chuẩn bị các kết nối Không đồng bộ để yêu cầu dữ liệu từ nhiều trang web (nói X1, X2, vv) bên ngoài GAE bằng cách sử dụng urlfetch.make_fetch_call() - GET request.Xóa tiêu đề (Tác nhân người dùng) khỏi make_fetch_call trong khi yêu cầu từ GAE
Điều này làm việc tốt cho trang web X1 nhưng không hoạt động đối với X2. Bắt đầu thăm dò trên máy chủ dev cục bộ. Khi thăm dò tôi nghi ngờ rằng X2 đang kiểm tra thẻ '' User-Agent ':' Python-urllib/2.7 '} trong tiêu đề. Đây là dự đoán tốt nhất của tôi kể từ khi thay đổi trường này thành {'User-Agent': 'Mozilla/5.0'} trả về kết quả mong muốn.
Vì vậy, tôi đã tải mã lên GAE và bắt đầu quá trình với urlfetch.make_fetch_call(). Khi chặn cuộc gọi này, tôi thấy rằng bất kể tôi làm gì, tiêu đề mặc định được GAE thêm vào sẽ không bị xóa. Đây là tiêu đề mặc định được GAE thêm vào.
302 218ms 0kb Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/48.0.2564.103 Safari/537.36 AppEngine-Google; (+ http://code.google.com/appengine; appid: s ~ xxx-etching-112014) module = phiên bản mặc định = 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, như 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 dụ = 00c61b117ce5ebac2a2eba44f26a01d4f2
Đây là những gì tôi đã cố gắng
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()
Đây là những gì tôi nhận được.
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 = phiên bản mặc định = 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 dụ = 00c61b117ce5ebac2a2eba44f26a01d4f2
gì tôi muốn là một cái gì đó như thế này.
GET http://somelink/search/abc HTTP/1.1 Accept-Encoding: sắc Host: somelink.com kết nối: gần User-Agent: Mozilla/5.0
Tôi muốn loại bỏ hình thức tiêu đề tất cả mọi thứ khác hơn là tài -Agent: Mozilla/5.0 ??
Lưu ý - để chặn yêu cầu được tạo từ GAE bằng urlfetch tôi đang sử dụng một phiên bản GAE khác.