2014-02-23 2 views
1

나는 curl/libcurl/pycurl을 사용하여 다운로드를 시도하는 파일 링크를 찾는 웹 페이지를 읽는 프로그램을 작성하려고합니다. 필자는 pycurl이 제대로 작동 할 때까지 모든 것을 가지고 있으며 터미널에서 컬 명령을 사용할 때 파일을 다운로드 할 수 있습니다. 컬 명령은 다음과 같습니다Pycurl redirect 옵션이 무시되고 웹에서 비디오를 읽는 데 실패했습니다.

curl -LO https://archive.org/download/TheThreeStooges/TheThreeStooges-001-WomanHaters1934moeLarryCurleydivxdabaron19m20s.mp4 

이 하나의 리디렉션 후 올바르게 파일을 다운로드 (출력에 모두 0으로 읽는 파일)을 초래한다. -L 플래그를 제거하면 명령이 단지 -O입니다. 파일을 찾지 못하는 첫 번째 행에만 도달하고 중지합니다.

파이썬 스크립트에서 pycurl을 사용하여 동일한 작업을 수행하려고 할 때 [Curl object] .FOLLOWLOCATION을 1로 설정할 수 없으므로 -L 플래그와 동일한 것으로 간주됩니다.

python2.7: src/pycurl.c:272: get_thread_state: Assertion `self->ob_type == p_Curl_Type' failed. 

는 리디렉션 누락, 아니면 내가 뭔가를 놓친 거지 : 파이썬 코드는 다음과 같습니다 : 다음이 실행되면

c = [class Curl object] # get a Curl object 
fp = open(file_name,'wb') 
c.setopt(c.URL , full_url) # set the url 
c.setopt(c.FOLLOWLOCATION, 1) 
c.setopt(c.WRITEDATA , fp) 
c.perform() 

, 그것은 (c.perform 다네) 및 표시 이전에 내가 상대적으로 새로운 사람 이었기 때문에 이전에?

답변

0

c.perform() 단계에 대한 자세한 출력을 활성화하면 내 프로그램이 가지고있는 근원적 인 문제임을 알 수있었습니다. 효과적으로 플래그가 지정된 첫 번째 줄은 열린 연결이 재사용되고 있음을 나타냅니다.

필자는 원래 스크립트 대신 객체 지향 설정에 파일을 패키지화 했으므로 컬 객체가 닫히지 않고 읽히고 다시 사용되었습니다. 따라서 첫 번째 연결 시도가 실패했습니다. 옵션을 올바르게 설정하지 않았기 때문에 웹 사이트/서버 (아마도 잘못된 연결 설정이 있음)에 대한 연결이 재사용되고있었습니다. 스크립트를 기존 Curl 개체를 닫고 파일을 다운로드하기 전에 새 Curl 개체를 만들어 문제를 해결했습니다.