r1der
@r1der

Python urllib2 vs PHP curl. Как справиться с ETag?

Здравствуйте
Столкнулся с такой проблемой, абсолютно одинаковый код на двух разных языках, который шлет абсолютно одинаковые заголовки на один и тот же сервер через один и тот же прокси, выдает разные ответы со стороны сервера. В случае с питоном он просто отдает какую то старую страницу с Etag и каждый раз одно и тоже

$xs=new Surfer("www.dell.com");
$xs->random_ua=0;
$xs->only_body=1;
$xs->setProxy("#######:65234");   // сокс прокси 
$xs->setProxyType("socks5");
$xs->setProxyPass("######");

$xs->setReferer("");
$xs->ssl_always=1;

$buff=$xs->send("/support/Contents/category/eSupport-Order-support?c=us&l=en&~ck=mn",array("follow"=>1));
echo $buff=$xs->send("/support/orders/us/en/19/Order/Details?sbon=205523888",array("follow"=>1,"debug"=>1,"custom"=>array("Connection: close")));

#класс обертка для курла
class Surfer...


Данный код генерирует для последнего запроса следующие заголовки
GET /support/orders/us/en/19/Order/Details?sbon=205523888 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 5.1; U; en)
Host: www.dell.com
Accept: */*
Accept-Encoding: deflate,identity
Referer: https://www.dell.com/support/Contents/category/eSupport-Order-support?c=us&l=en&~ck=mn
Cookie: dais-c=NchVtQmz0UBCDQ77NpbAAoa0OcMfUnzX8tx7bz4aTNEArLVCzLPaR4bDSFexnAAx;eSupId=SID=29568d7f-2cf5-432e-b720-94eb514e823a;lwp=c=us&l=en&cs=19&s=dhs;
Connection: close


Далее следует код на питоне который делает все тоже самое но вместо этого такой же запрос выдает нечто иное и всегда одно и тоже

h=urllib2.HTTPSHandler(debuglevel=1)

current_request="""User-Agent: Mozilla/5.0 (Windows NT 5.1; U; en)
Accept: */*
Accept-Encoding: *"""

current_req=current_request.split("\n")

while True:
    proxy=random.choice(socks_list)

    orderid=random.choice(orders)
    prx=SocksiPyHandler(socks.SOCKS5, proxy[1], 65234,True, "********')

    cj = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(h,urllib2.HTTPCookieProcessor(cj),prx)

    req = urllib2.Request("https://www.dell.com/support/Contents/category/eSupport-Order-support?c=us&l=en&~ck=mn")

    for el in current_req:
        temp=el.split(':')
        req.add_header(temp[0], temp[1].strip(' '))

    response = opener.open(req)
    res = response.read()

    print "--------"
    print "--------"
    time.sleep(2)

    req = urllib2.Request("https://www.dell.com/support/orders/us/en/19/Order/Details?sbon=205523888" )

    for el in current_req:
        temp = el.split(':')
        req.add_header(temp[0], temp[1].strip(' '))
    req.add_header("Referer","https://www.dell.com//support/contents/us/en/19/category/eSupport-Order-support?c=us&l=en&~ck=mn")

    response = opener.open(req)
    res = response.read()


данный код генерирует абсолютно идентичный запрос
но вот ответ всегда вот такой

reply: 'HTTP/1.1 200 OK\r\n'
header: Server: Apache
header: ETag: "a50bd009cc90b71337825d9fe7063dd9:1488828720"
header: Last-Modified: Mon, 06 Mar 2017 19:32:00 GMT
header: Accept-Ranges: bytes
header: Content-Length: 130762
header: Content-Type: text/html
header: Date: Thu, 18 May 2017 14:55:15 GMT
header: Connection: close


и он не должен быть таким, далее следует контент какой то страницы заглушки. Одним словом сервер должен отвечать нормальным контентом, и при одинаковом коде получается разный ответ

ПС прокси везде один и тот же, заголовки проверялись как исходящие так и те же заголовки как они уже были получены на сервере.
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
заюзай pyCurl и не парься
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3Д специалист. Долго, Дорого, Дерьмово.
Заюзай python requests и не парься docs.python-requests.org
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы