그래서 맨손 소켓을 사용하여 웹 페이지를 다운로드하는 프로그램이 있습니다. 나는 맨손으로 소켓을 사용해야하고 요청이나 urllib 등을 사용할 수 없다. 나는 오징어 프록시 뒤에있는 네트워크에있다. 그래서 나의 파이썬 프로그램은 간단히 connect
을 프록시 서버로 만들고 GET 요청을한다. HAR 파일에서 가져옵니다. 커틀을 사용하여 요청을 테스트했습니다.오징어 프록시는 GET 요청에 501을 제공하지만 파이썬에 의해 작성된 것입니다.
curl https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.wgbKiK972Ko.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AItRSTOlX0YCaQmKijyj5lpKQ5AVm7UE6A/cb=gapi.loaded_0 -o out_file
출력을 적절한 전체 파일로 가져옵니다. 나는 응답 헤더를 검사하고 그들은
HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Type: text/javascript; charset=UTF-8
Last-Modified: Thu, 11 Dec 2014 20:44:59 GMT
Date: Fri, 12 Dec 2014 03:38:46 GMT
Expires: Sat, 12 Dec 2015 03:38:46 GMT
X-Content-Type-Options: nosniff
Server: sffe
X-XSS-Protection: 1; mode=block
Cache-Control: public, max-age=31536000
Age: 1065247
Alternate-Protocol: 443:quic,p=0.02
Transfer-Encoding: chunked
가 지금은 파이썬에서 소켓 프로그래밍을 사용하여 같은 일을 시도하다 :
HOST = 'proxy.address.of.squid.proxy'
PORT = 3128
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
url = 'https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.wgbKiK972Ko.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AItRSTOlX0YCaQmKijyj5lpKQ5AVm7UE6A/cb=gapi.loaded_0'
httpVrsn = 'HTTP/1.1'
domain = 'apis.google.com'
objReq = 'GET '+url+' '+httpVrsn+'\r\nHost: '+domain+'\r\n\r\n';
s.send(objReq);
data = '';
try:
data = s.recv(1024);
print data
# other non-relevant stuff
내가 얻을 출력은
HTTP/1.0 501 Not Implemented Server: squid/3.1.19 Mime-Version: 1.0 Date: Wed, 24 Dec 2014 10:25:42 GMT Content-Type: text/html Content-Length: 3576 X-Squid-Error: ERR_UNSUP_REQ 0 Vary: Accept-Language Content-Language: en X-Cache: MISS from localhost X-Cache-Lookup: NONE from localhost:3128 Via: 1.0 localhost (squid/3.1.19) Connection: close <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ERROR: The requested URL could not be retrieved</title> <style type="text/css"><!-- /* Stylesheet for Squid Error pages Adapted from design by Free CSS Templates http://www.freecsstemplates.org Released for free under a Creative Commons Attribution 2.5 License */ /* Page basics */ * { font-family: verdana, sans-serif; } html body { margin: 0; padding: 0; background: #efefef; font-size: 12px; color: #1e1e1e; }
그래서 내 오징어 프록시 3.1이 설명하지 않은 this을 확인했습니다. support Transfer-Encoding : chunked하지만 POST 요청의 경우라고 말합니다. GET 요청에도 적용되는지 확실하지 않습니다. 나는 또한 Unable to test HTTP PUT-based file upload via Squid Proxy을 체크 아웃했다. 필자는 컬 (curl)이나 심지어 브라우저가 동일한 프록시 뒤에있는 동일한 네트워크에서 요청되었을 때 콘텐츠를 가져올 수 있지만 파이썬을 통해 성공적으로 응답을 가져올 수 없다는 것을 이해할 수는 없습니까?
프록시를 제어 할 권한이 없으므로 Squid 프록시로 조정하지 않고도 파이썬 프로그램을 작동시킬 수있는 방법이 있습니다.
아마 사이트를 참조하십시오 구성합니다. mechanize.Browser를 사용하고 파이썬 프로그램이라는 사용자 에이전트를 설정하십시오. Firefox. –
그럴 경우 사용자 에이전트가 어떤 용도로 사용하는지 궁금합니다. 지금까지 제가 확인한 바에 따르면, 기본적으로 curl에는 User-Agent가 없으며 여전히 작동합니다. 그 이유는 아니지만 시도해 보겠습니다. – sawrubh