2016-01-01 9 views
5

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

मैं इस अनुरोध

import requests 
url ='https://api.linkedin.com/uas/js/xdrpc.html' 
r = requests.get(url) 
print r.text 

प्रतिक्रिया उस में जावास्क्रिप्ट का एक बहुत है कि एक खाली HTML फ़ाइल है या नहीं। लाइन 3661 पर, यह Rapportive के बाद कॉल के लिए RequestHeader सेट:

ak.setRequestHeader("oauth_token", ae); 

वहाँ एक रास्ता मुझे लगता है कि पेज का अनुरोध कर सकते हैं और फिर ae वापसी है?

+0

फ़ाइल में एकमात्र चीज जेएस है, या एक HTML शरीर के अंदर जेएस मिश्रित है? –

+0

केवल जेएस। आप वास्तव में उस कोड को चला सकते हैं और प्रतिक्रिया देख सकते हैं। Rapportive एपीआई वास्तव में लचीला है। –

+0

आपको सभी जावास्क्रिप्ट निष्पादित करने की आवश्यकता है, क्योंकि यह 'ए' सेट करता है। – Barmar

उत्तर

0

तुम सिर्फ टोकन पुन: प्राप्त करने तुम सिर्फ एक regex मैच नहीं कर सकते में रुचि रखते हैं:

var str = '<script>var a = 1;...ak.setRequestHeader("oauth_token", ae);...</script>'; 
var token = str.match(/setRequestHeader\("oauth_token",\s*([^)]+)/)[1]; 

हालांकि इस ae मान लिया गया वास्तविक स्ट्रिंग मान है। यदि यह एक चर है तो यह दृष्टिकोण आसानी से काम नहीं करेगा।

संपादित करें: यदि यह एक चर है आप की तरह कुछ कर सकता है: पेज से जावास्क्रिप्ट लौटे चलाने से पहले

str.replace(/\w+\.setRequestHeader\([^,]+,\s*([^)]+)\s*\);/, 'oauthToken = \1'; 

, तो वैश्विक oauthToken (लापता 'var' नोटिस) के मूल्य में शामिल होंगे टोकन, कोड का मूल्यांकन मानते हुए कॉलर के समान दायरे में चलाया जाता है।

+0

के अंदर कॉल करता हूं, ठीक है, मैं उम्मीद कर रहा हूं पृष्ठ का अनुरोध करने में सक्षम होने के लिए, इसे किसी भी तरह से पार्स करें और टोकन तक पहुंचें। –

+0

यह काम नहीं करेगा।'एई' वस्तु है, कच्चे टोकन नहीं – Valijon

+0

@ वालिजन मेरा संपादन देखें, यह गंदा है लेकिन यह चाल हो सकती है। –

0

मुझे लगता है कि आप की कोशिश कर सकते हैं: के रूप में आप पहले से ही करता है

  1. पेज जाओ;
  2. प्रतिक्रिया पृष्ठ से सभी गैर-जावास्क्रिप्ट तत्वों को हटाएं;
  3. कुछ कोड को ओवरराइड करने के लिए पृष्ठ के जावास्क्रिप्ट में एक जावास्क्रिप्ट (नीचे वर्णित) तैयार करें;
  4. eval('<code>') के साथ इसे निष्पादित करें;
  5. जांचें कि टोकन सही तरीके से सेट किया गया है या नहीं;

मैं XMLHttpRequest को ओवरराइड करने के लिए निम्न कोड का प्रस्ताव दे रहा हूं। setRequestHeader कार्यक्षमता टोकन प्राप्त करने में सक्षम होने के लिए:

// this will keep the token 
var headerToken; 

// create a backup method 
XMLHttpRequest.prototype.setRequestHeaderBkp = 
XMLHttpRequest.prototype.setRequestHeader; 

// override the "setRequestHeader" method 
XMLHttpRequest.prototype.setRequestHeader = function(key, val) 
{ 
    if ('oauth_token' === key) 
    headerToken = val; 

    this.setRequestHeaderBkp(key, val); 
} 
+0

मैं इसे आज़मा दूंगा! –

+0

@ मॉर्गनएलेन समस्या के बारे में कोई खबर? –

संबंधित मुद्दे