2011-09-22 5 views
5

나는 몇 가지 테스트 코드가 난 보통 브라우저를 통해 수행 할 작업 수행 urllib2를 사용 (A 웹 애플리케이션의 일부로서) : virtualenv의 설명 할 수없는 Urllib2 문제입니다.

  • 이동 다른 페이지
  • 로 원격 웹 사이트에

    • 로그인
    • 는 3 가지 기계, 파이썬의 다른 버전하지만 동일한 모든에 (--no-사이트 패키지) 나는 4 별도의 깨끗한 virtualenvs을 만들었습니다

    형태로 작성하여 POST를 수행 패키지 (pip 요구 사항 파일을 통해), 코드 o nly는 로컬 개발 컴퓨터 (2.6.1 및 2.7.2)의 두 가상 장치에서 작동합니다. - 내 프로덕션 VPS 중 하나에서 작동하지 않습니다.

    실패한 경우 성공적으로 로그인 할 수 있습니다. 올바른 페이지이지만 양식을 제출할 때 원격 서버에서 오류가 발생했다는 응답을 보냅니다. 응용 프로그램 서버 오류 페이지 ('요청을 완료하지 못했습니다')이고 웹 서버 오류는 아닙니다. 나는 성공적으로 로그인하고, 두 번째 페이지로 기동 할 수 있기 때문에

    • ,이 세션이나 쿠키 문제가 될 것 같지 않습니다 - 나는의 작업을 수행 할 수 있기 때문에 최종 POST
    • 특히입니다 정확히 같은 헤더와 데이터를 가진 특정 머신, 이것은 다른 회사에서 빌린 두 개의 개별 VPS에서 코드를 테스트하려고하기 때문에 내가 요청/게시하는 내용에 문제가있는 것 같지 않습니다.
    • VPS 물리적 환경에 문제가있다
    • 코드가 2 개의 다른 파이썬 버전에서 작동하기 때문에, 나는 incompa 인 것을 상상할 수 없다. 질 나쁜 문제

    나는 왜 이것이 작동하지 않는지에 관해서는 완전히 알 수 없다. 나는 그 문제가 무엇인지를 알 수 없기 때문에 '돌이켜 보았고 다시 켜는'일조차했습니다.

    나는 그것이 원격 서버가 좋아하지 않는 VPS에서 오는 최종 POST와 관련이 있다고 생각하지만, 그게 무엇인지 알 수는 없다. URLlib의 후드 아래에서 원격 서버가 응답을 거부하게 만드는 문제가있는 것처럼 느껴집니다.

    내 작업 로컬 복사본에 있으며 원격으로 작동하지 않는, 그래서에서 원래 함께 할 수있는 뭔가가되어야하므로, 나는 VPS에 동일한 파이썬 버전 (2.6.1)을 설치 한 편집 VPS. 어떻게 이것이 Http 요청에 영향을 미칠 수 있습니까? 그것은 더 낮은 수준인가?

    +0

    VPS 또는 대상 웹 사이트에서 방화벽이 실행되고 있습니까? 쿠키를 사용하고 있습니까? 그렇다면 제대로 제작되고 있습니까? –

    +0

    아니요, 두 개의 별도 VPS에서 실행 중이며 어느 쪽에도 작동하지 않지만 방화벽 뒤에 있다고 생각하지 않습니다. 나는 cookielib과 함께 쿠키를 사용하고 있습니다. 그러나 쿠키가 처음 두 작업 (로그인 및 변경 페이지)을 위해 작동하기 때문에 문제가 있다고 생각하지 않습니다. –

    답변

    0

    글쎄, 내가 알고있는 것처럼 보입니다. 이 문제가 발생했는지는 모르겠지만 100 % 이유는 아닙니다.

    는 3 요청을하기 전에 (다른 페이지-이동) 2 요청을 보낸 후 나는 단순히 서버 대기 (time.sleep()를)했습니다 (이 양식을 작성하여 POST를 수행) .

    제 3 자 서버의 상태 때문에 또는 URLlib와 관련하여 이상한 점이 있습니까? 내 개발 컴퓨터에서 작동하는 것처럼 보인 이유는 아마도 코드를 실행하는 서버가 느려졌 기 때문일 것입니다.

    1

    당신은 urllib2를위한 debuglevel = 1을 설정하려고하고 함께 오는 것을 볼 수 있습니다 :

    import urllib2 
    h=urllib2.HTTPHandler(debuglevel=1) 
    opener = urllib2.build_opener(h) 
    ... 
    
    +0

    나는 이것들을 미세 치아 빗으로 처리했습니다! 나는 또한 일하는 것들을 비 작동하는 것들과 비교해 보았는데 그것들은 상당히 동일하다. 나는 편집하고 몇 가지 예를 들어 보겠습니다. –

    1

    이 어둠 속에서 총 샷되지만, 당신의 VPSS 64 비트 및 가정용 컴퓨터 (32) - 비트, 또는 그 반대? 어쩌면 무언가의 기본 크기 나 정확도의 차이가 서버를 놀라게 할 수도 있습니다.

    웹 서버가 사용하는 소프트웨어 스택에 대한 정보를 찾으실 수 있습니까?

    +0

    좋은 제안이지만, 불행히도 그들은 동일합니다! –

    1

    urllib2 (Zimbra의 REST API로 작업)에서 비슷한 문제가 발생하여 결국 pycurl로 전환되었습니다.

    login/navigate/post의 작업에 대한 PS , 나는 보통 Mechanize이 유용하고 사용하기 쉽다고 생각합니다. 어쩌면 당신은 그것을 보여줄 수 있습니다.

    +0

    이 단계에서 이것이 유일한 옵션 일 수 있다고 생각합니다. 나는 그것이 작동하도록하기 위해 생각할 수있는 모든 것을 시도했고, 단지 그것이 모호한 호환성 문제라고 상상할 수 있습니다. 나는 실제로 우수한 기계 장치를 사용했지만 불행히도 같은 문제가 발생한다는 것을 의미하는 Urllib2 위에 있다고 생각합니다. –

    관련 문제