2014-01-12 2 views
0

은 내가 HTTP 트래픽을 분석하여이있어요청 본문을 Python으로 직접 게시하는 방법은 무엇입니까?

1)The URL: "http://kuexams.org/get_results"
2)Request body: "htno=001111505&ecode=kuBA3_Supply_Dec_2013".

POST 요청에 대해 다음과 같은 세부 정보가 있습니다. 그런 다음이 값을 지정하는 사이트를 찾았으며 응답이 다시 표시됩니다. https://requestable.pieterhordijk.com/sSd7o

the site과 비슷한 것을 만드는 방법을 알아야합니다. 요청 본문을 URL에 게시하고 구문 분석 할 데이터를 반환하면됩니다.

P.S :이 사이트 여기 http://kuexams.org/results/3GKZ-D_QBHLWXrg7lZ2IGoKBI7lGfpSK37GNoykJ8k5UerNGYn21FN6w_R5XZ8IQVUHRb8ZYVwq-zN4BhIjusQ,,/ugresults/ug 에 POST 여러 방법을 시도했습니다는 내가 피곤하다. 그것은 다른 방법을 사용하지만 비참하게 실패합니다.

import mechanize 
import cookielib 
import urllib 
import logging 
import sys 
import re 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=3) 
br.addheaders = [('User-agent', 'Firefox')] 


r = br.open('http://kuexams.org/results/06JZ4SYmTV97s4oROGuLYglPFH3XxJKAunIilJkDBV0gBxSU6YVJ_kXRL0UZb3cIjz9aFdnkYaE-T_S3ubaXPg,,/ugresults/ug') 

scrape = r.read() 
#print(scrape) 
pattern = re.compile('=5&code=(.{5})\'') 

img = pattern.findall(scrape) 
print(img) 
imgstr = str() 
imgstr = img[0] 
print(imgstr) 

br.select_form("appForm") 

br.form["htno"] ='001111441' 

br.form["entered_captcha"] = imgstr 

response = br.submit() 

print response.read() 

br.back() 
+0

무엇이 문제입니까? 당신은 그것에 대해 물어 보지 않았습니다. – aIKid

+0

@aIKid 아래 코드는 작동하지 않으며 불필요합니다. URL을 사용하여 게시하고 내가 언급 한 웹 사이트 (POST를 테스트하기 위해 다른 Stack 교환 멤버가 만든)와 같은 본문을 요청할 수 있기를 원합니다. – Ufoguy

+0

어떤 응답을 얻었습니까? 예외가 제기 되었습니까? – aIKid

답변

2

쿠키 또는 captcha 세부 정보를 사용하지 않는 게시 요청을 볼 수 있습니다. 클라이언트 측만 구현되므로 쿠키를 저장하거나 captcha를 가져올 필요가 없으므로이 코드가 유용합니다. 시원하고 사용하기 쉬운 요청을 사용하십시오. 그 서버가 요청에 의해 기본 사용자 에이전트를 수락하지 않는

import requests 

url='http://kuexams.org/get_results' 

payload={'htno': '001111441', 'ecode': 'kuBA2_Supply_Dec_2013'} 

headers={"User-Agent": "Some Cool Thing"} 

r=requests.post(url,headers=headers,data=payload) 

print r.content 

주 그래서는 POST 요청을 수락하지 않거나 금지 된 오류를 줄 수도없이 사용자 정의 하나를 추가했다.

관련 문제