2011-01-07 2 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) 

위의 코드는 정상적으로 작동합니다. 내 질문은, 또한이 다음 줄을 (이전 헤더 정보에서 더) LoginHeader에 추가해야 파이어 폭스의 서핑처럼 보이게 만들고 기계화하지 않는 것인가?

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 헤더로 처리해야합니다. 파이썬 스크립트? 더 세게, 그러나 WireShark와 같은 소프트웨어를 스니핑하는 패킷은 그것을 할 것이다. 두 경우 모두 비 스크립트 노이즈가 많이 발생하지만 많은 유용한 정보를 제공 할 수 있습니다. – TryPyPy

5

당신이 더 많은 정보를 위해 mechanize examples를 참조 mechanize.Browser

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

기계화뿐만 아니라 형태로 입력 할 수 있습니다

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를 사용하여 하나의 리소스를 추가 할 수 있습니다. 해당 리소스가 요청되지 않았거나 자바 스크립트보다 먼저 요청 된 경우 "가짜"브라우저라는 것을 알고 있습니다. 연결 당 요청 수 (연결 유지)를 보거나 첫 페이지의 모든 CSS 파일 (HTML의 맨 위에 있음)이로드되는지 확인할 수도 있습니다.

YMMV 그러나 "가상"브라우저 패스를 "실제"브라우저 패스 (인간이 사용함)로 만들기에 충분할 정도로 시뮬레이션하는 것은 꽤 번거로울 수 있습니다.

관련 문제