2011-01-07 3 views
8

OK、ここでアカウントにログインしながら、私はライブHTTPヘッダーから得たヘッダ(単なる例)の情報です:通常彼らは実際のブラウザから発信見えるようにリクエストを機械取得する方法

http://example.com/login.html 

POST /login.html HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Referer: http://example.com 
Cookie: blahblahblah; blah = blahblah 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 39 
username=shane&password=123456&do=login 

HTTP/1.1 200 OK 
Date: Sat, 18 Dec 2010 15:41:02 GMT 
Server: Apache/2.2.3 (CentOS) 
X-Powered-By: PHP/5.2.14 
Set-Cookie: blah = blahblah_blah; expires=Sun, 18-Dec-2011 15:41:02 GMT; path=/; domain=.example.com; HttpOnly 
Set-Cookie: blah = blahblah; expires=Sun, 18-Dec-2011 15:41:02 GMT; path=/; domain=.example.com; HttpOnly 
Set-Cookie: blah = blahblah; expires=Sun, 18-Dec-2011 15:41:02 GMT; path=/; domain=.example.com; HttpOnly 
Cache-Control: private, no-cache="set-cookie" 
Expires: 0 
Pragma: no-cache 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 4135 
Keep-Alive: timeout=10, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=UTF-8 

私は考えこのようなコード:

import mechanize 
import urllib2 

MechBrowser = mechanize.Browser() 
LoginUrl = "http://example.com/login.html" 
LoginData = "username=shane&password=123456&do=login" 
LoginHeader = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)", "Referer": "http://example.com"} 

LoginRequest = urllib2.Request(LoginUrl, LoginData, LoginHeader) 
LoginResponse = MechBrowser.open(LoginRequest) 

上記のコードは正常に動作します。私の質問は、実際には機械化ではなく、Firefoxのサーフィンのように見えるように、次の行を追加する必要がありますか?

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 

"実際に見えるようにするために偽装する必要があるヘッダー情報の部分/

答えて

6

これは、あなたが「だまそう」としていることによって異なります。

http://browserspy.dk/browser.php

http://www.browserscope.org(「...私たちは、あなたが使用していると思う」を探してください)

http://www.browserscope.org/ua

:あなたはあなたの成功を測るためにスニッフィング簡単なユーザエージェントの操作を行い、いくつかのオンラインサービスを試すことができます

http://panopticlick.eff.org/ - あなたには、いくつかの '追跡するにはあまりにも共通の' オプション

http://networking.ringofsaturn.com/Tools/browser.php

0を選ぶのに役立ちます>

私は確信しているプログラマーがあなたのゲームを検出できると信じていますが、多くのログパーサーとツールはあなたの実際のブラウザが送信したものをエコーし​​ません。

JSの不足は赤旗を発生させる可能性があるので、JSを無効にして送信されたヘッダーをキャプチャすることが重要です。ここで

+0

もう一度おねがいします。 – Shane

+0

スクリプトのネットワーク接続を監視するツールはありますか?だから私はサーバーと私のスクリプトの間で送信されるデータを知っています。 – Shane

+0

JavaScript?ライブHTTPヘッダーはそれを行う必要があります。 Pythonスクリプト?より堅いが、WireSharkのようなソフトウェアを盗聴するパケットがそれを行うだろう。どちらの場合も、スクリプト以外のノイズが多く発生しますが、それでも有用な情報がたくさん得られます。 – TryPyPy

5

は、あなたがより多くの情報のためmechanize examplesを参照してくださいmechanize.Browser

br = mechanize.Browser() 
br.addheaders = [('User-agent', 'your user agent string here')] 

Mechanizeのは、同様のフォームに記入することができます

br.open('http://yoursite.com/login') 
br.select_form(nr=1) # select second form in page (0 indexed) 
br['username'] = 'yourUserName' # inserts into form field with name 'username' 
br['password'] = 'yourPassword' 
response = br.submit() 
if 'Welcome yourUserName' in response.get_data(): 
    # login was successful 
else: 
    # something went wrong 
    print response.get_data() 

によって行われたすべての要求のためのユーザエージェントを設定する方法を説明します

0

あなたがボット/スクリプト/非実在のブラウザを残しておくことに嫌な人は、HTTPリクエストの順番などを探し、JavaScriptを使って1つのリソースを追加しましょう。そのリソースが要求されていない、またはJavaScriptの前にリクエストされている場合、そのリソースは「偽の」ブラウザであることがわかります。 また、接続ごとにリクエスト数を調べることもできます(キープアライブ)。または、最初のページのすべてのCSSファイル(HTMLの一番上にあることが前提)をロードすることができます。

YMMVしかし、 "実際の"(人間によって使用される)ブラウザパスを作るために十分にシミュレートするのはかなり面倒になることがあります。

関連する問題