2016-01-01 19 views
5

Gmail'de Rapportive API'da biraz tersine mühendislik yapıyorum.Bir HTML dosyasındaki Javascript değişkenine erişme

bu isteği

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

yanıtı içinde JavaScript bir yeri vardır boş bir HTML dosyası olduğundan emin olun. hat 3661 tarihinde, o Rapportive sonraki çağrı için RequestHeader ayarlar: O sayfayı istemek ve sonra ae dönebilirsiniz bir yol

ak.setRequestHeader("oauth_token", ae); 

var mı? size sadece regex maç yapamaz jetonu alınırken sadece ilgileniyorsanız

+0

Dosyadaki tek şey JS, yoksa bir HTML gövdesinde karışık JS var mı? –

+0

Sadece JS. Aslında bu kodu çalıştırabilir ve yanıtı görebilirsiniz. Rapportive API gerçekten esnektir. –

+0

Tüm Javascript'i çalıştırmanız gerekiyor, çünkü 'ae' yi ayarlar. – Barmar

cevap

0

: Bu ae varsayar rağmen

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

gerçek bir dize değeridir. Bu bir değişkense, bu yaklaşım kolayca işe yaramaz.

Düzenleme: bir değişken Eğer böyle bir şey yapabileceğini: JavaScript sayfasından döndü çalıştırmadan önce

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

ardından küresel oauthToken (eksik 'var' fark) değerini içerecektir belirteç, kodun değerlendirilmesini üstlenerek arayan ile aynı kapsamda çalışır.

+0

İyi, umuyorum Sayfayı istemek, bir şekilde ayrıştırmak ve erişim belirtecine erişmek. –

+0

Çalışmayacak.'ae' nesnesidir, ham jeton değil – Valijon

+0

@Valijon Düzenlemeyi gör, kirli ama hile yapabilir. –

0

Ben deneyebileceğiniz düşünüyorum: Zaten yaptığı gibi

  1. sayfayı al;
  2. Javascript olmayan öğelerin tümünü yanıt sayfasından kaldırın;
  3. Bazı kodları geçersiz kılmak için javascript'i (aşağıda açıklanmıştır) sayfanın javascript'inde hazırlayın;
  4. eval('<code>') ile çalıştırın;
  5. Belirteç doğru ayarlanmış mı kontrol edin;

XMLHttpRequest'u geçersiz kılmak için aşağıdaki kodu öneririm. setRequestHeader işlevsellik belirteci alabilmek için:

// 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

Bunu deneyeceğim! –

+0

@MorganAllen sorun hakkında herhangi bir haber var mı? –

İlgili konular