GAE

6

से अनुरोध करते समय make_fetch_call से हेडर (उपयोगकर्ता-एजेंट) को हटा रहा है मेरे पास Google App Engine (GAE) का एक एप्लिकेशन है और मैं पायथन 2.7 का उपयोग कर रहा हूं। इस एप्लिकेशन को उपयोगकर्ता पोर्टल (क्रोम कहें) से एक GET (AJAX) अनुरोध प्राप्त होता है। अनुरोध प्राप्त करने पर, मैं urlfetch.make_fetch_call() - अनुरोध प्राप्त करते हुए GAE के बाहर एकाधिक वेबसाइटों (X1, X2, आदि) से डेटा का अनुरोध करने के लिए असीमित कनेक्शन तैयार करता हूं।GAE

यह एक्स 1 वेबसाइट के लिए ठीक काम करता है लेकिन एक्स 2 के लिए नहीं। स्थानीय देव सर्वर पर जांच शुरू की। जांच पर मुझे संदेह था कि एक्स 2 हेडर में '' उपयोगकर्ता-एजेंट ':' पायथन-urllib/2.7 '} टैग की जांच कर रहा है। इस क्षेत्र को {'उपयोगकर्ता-एजेंट' में बदलने के बाद से यह मेरा सबसे अच्छा अनुमान है: 'मोज़िला/5.0'} वांछित परिणाम देता है।

इसलिए मैंने GAE को कोड अपलोड किया और urlfetch.make_fetch_call() के साथ प्रक्रिया शुरू की। इस कॉल को अवरुद्ध करने पर मैंने पाया कि कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, GAE द्वारा जोड़ा गया डिफ़ॉल्ट शीर्षलेख हटाया नहीं गया है। यहां GAE द्वारा जोड़ा गया डिफ़ॉल्ट शीर्षलेख है।

302 218ms 0kb Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, छिपकली की तरह) क्रोम/48.0.2564.103 सफारी/537.36 AppEngine-गूगल; (+ http://code.google.com/appengine; एपिड: एस ~ xxx-etching-112014) मॉड्यूल = डिफ़ॉल्ट संस्करण = 1 107.178.194.96 - - [06/फरवरी/2016: 1 9: 57: 04 -0800] "प्राप्त करें/HTTP/1.1" 302 383 "http://www.mywebbsite.com/" "मोज़िला/5.0 (विंडोज एनटी 6.1; WOW64) ऐप्पलवेबकिट/537.36 (केएचटीएम, जैसे गेको) क्रोम/48.0.2564.103 सफारी/537.36 ऐपइंजिन-Google; (+ http://code.google.com/appengine; एपिड: एस ~ xxx-etching-112014)" "1.usedForIntercepting.appspot.com" एमएस = 218 cpu_ms = 224 cpm_usd = ०.००००४३ loading_request = 1 app_engine_release = 1.9.32 trace_id = fd7b7420e7f8c23371a5b0ea7e9651 उदाहरण = 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() 

यह मुझे मिला है।

2016-02-07 13: 01: 21.306/302 59ms 0kb मोज़िला/5.0 ---------------------- AppEngine-Google; (+ http://code.google.com/appengine; एपिड: एस ~ xxx-etching-112014) मॉड्यूल = डिफ़ॉल्ट संस्करण = 1 107.178.194.20 - - [06/फरवरी/2016: 23: 31: 21 -0800] "प्राप्त करें/HTTP/1.1" 302 383 - "मोज़िला/5.0 ---------------------- ऐपइंजिन-Google; (+ http://code.google.com/appengine; एपिड: एस ~ xxx-etching-112014)" "1.used फॉर इंटरसेप्टिंग .appspot.com "एमएस = 59 cpu_ms = 6 cpm_usd = .०,००,०४३ app_engine_release = 1.9.32 trace_id = a4a1f521c5a6fa65ed0295835dd175 उदाहरण = 00c61b117ce5ebac2a2eba44f26a01d4f2

जो मैं चाहता कुछ इस तरह है।

प्राप्त http://somelink/search/abc HTTP/1.1 Accept-Encoding: पहचान मेजबान: somelink.com कनेक्शन: करीब उपयोगकर्ता-एजेंट: Mozilla/5.0

मैं सब कुछ प्रपत्र उपयोगकर्ता के अलावा अन्य शीर्ष लेख निकालना चाहते हैं -एजेंट: मोज़िला/5.0 ??

नोट - GAE से urlfetch का उपयोग करके किए गए अनुरोध को अवरुद्ध करने के लिए मैं GAE का एक और उदाहरण उपयोग कर रहा हूं।

उत्तर

3

प्रलेखन, URL Fetch Python API Overview: Request Headers में, यह कहना है

सुरक्षा कारणों से, निम्न हेडर आवेदन के द्वारा बदला नहीं जा सकता:

  • सामग्री-लंबाई
  • होस्ट
  • वैरी
  • एक्स AppEngine-भीतर-AppID
  • X-Forwarded-के लिए
  • एक्स ProxyUser-आईपी

यह भी कहते हैं:

निम्न हेडर में से ऐप्लिकेशन आईडी का संकेत मिलता है अनुरोध करने वाला ऐप:

User-Agent। इस हेडर को संशोधित किया जा सकता है लेकिन ऐप इंजन ऐप इंजन अनुरोधों की पहचान करने के लिए सर्वर को अनुमति देने के लिए एक पहचानकर्ता स्ट्रिंग जोड़ देगा। संलग्न स्ट्रिंग में प्रारूप "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)" है, जहां APPID आपके ऐप का पहचानकर्ता है।

यदि आप कस्टम हेडर चाहते हैं, तो आपको अपना यूआरएलफ़ेच कोड लिखना होगा या बाहरी सर्वर का उपयोग करना होगा जो आपके हेडर के साथ कॉल करता है।