cURL을 사용하여 원격 파일을 부분적으로 다운로드 할 수 있습니까? 예를 들어, 원격 파일의 실제 파일 크기는 1000KB입니다. 어떻게 처음 500KB 만 다운로드 할 수 있습니까?cURL을 사용하여 원격 파일을 부분적으로 다운로드하는 방법은 무엇입니까?
답변
입니다.
그러나 서버가이 헤더를 따르지는 않지만 전체 파일을 보내면 curl이 모든 것을 다운로드합니다. 예 : http://www.php.net은 헤더를 무시합니다. 그러나 더 많은 데이터가 수신되면 쓰기 함수 콜백을 설정하고 요청을 중단 할 수 있습니다 (예 :
// php 5.3+ only
// use function writefn($ch, $chunk) { ... } for earlier versions
$writefn = function($ch, $chunk) {
static $data='';
static $limit = 500; // 500 bytes, it's only a test
$len = strlen($data) + strlen($chunk);
if ($len >= $limit) {
$data .= substr($chunk, 0, $limit-strlen($data));
echo strlen($data) , ' ', $data;
return -1;
}
$data .= $chunk;
return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.php.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);
+1입니다. 한계에 도달하면 $ writefn()이 -1을 반환하기 때문에이 작업이 가능합니다. 콜백 함수가 전달 된 바이트 수 ($ chunk)를 반환하면 curl은 연결을 중단합니다. – GZipp
우수. Perl에서 동일한 작업을 수행 할 때 더 나은 방법이 없기 때문에 파일 크기를 트리거하고 확인한 알람을 사용해야했습니다. 매우 해키지만 작동했습니다. –
내가 필요한 것. 그러나 언급 할만한 가치는 '청크'크기를 정의하는 CURLOPT_BUFFERSIZE입니다. 따라서 버퍼가 매우 크면 청크 크기에 어쨌든 전체 웹 페이지가 포함될 수 있습니다 (필자는 생각합니다!) –
문서의 첫 100 바이트 가져 오기 : 당신이 (다운로드 솔루션이 될 수
서버 자체에 말려 있지 않다. 오작동의 경우, 컬은 계속해서 다운로드를 계속합니다. –
다른 범위 (예 : 100-200)를 사용하면 다운로드 할 수 없습니다. 나는 "curl error (18)"를 얻는다. 이게 해결 될 수 있니? 좋은 대답은 – akashrajkn
현대 컬이 있는지 확인
curl -r 0-99 http://www.get.this
수동
에서을 첫 500킬로바이트로 output.txt)
curl -r 0-511999 http://www.yourwebsite.com > output.txt
- 는
511999
동안 당신은 또한 PHP 컬 확장자 범위 헤더 매개 변수를 설정할 수 있습니다500^1024-1
멋진 솔루션 VolkerK에 감사드립니다. 그러나이 코드를 함수로 사용해야하므로 여기서 생각해 냈습니다. 다른 사람들에게 유용하기를 바랍니다. 주된 차이점은 ($ limit, & $ datadump)입니다. 한도를 넘기면 참조 변수 $ datadump를 사용하여 결과를 반환 할 수 있습니다. 일부 웹 사이트는 사용자 에이전트 헤더없이 액세스를 허용하지 않기 때문에 CURLOPT_USERAGENT도 추가했습니다.
확인 http://php.net/manual/en/functions.anonymous.php
function curl_get_contents_partial($url, $limit) {
$writefn = function($ch, $chunk) use ($limit, &$datadump) {
static $data = '';
$len = strlen($data) + strlen($chunk);
if ($len >= $limit) {
$data .= substr($chunk, 0, $limit - strlen($data));
$datadump = $data;
return -1;
}
$data .= $chunk;
return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
//curl_setopt($ch, CURLOPT_RANGE, '0-1000'); //not honored by many sites, maybe just remove it altogether.
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$data = curl_exec($ch);
curl_close($ch);
return $datadump;
}
사용 :
$ 페이지 = curl_get_contents_partial ('http://some.webpage.com', 1000); // 처음으로 1000 바이트
echo $ page //를 읽거나 결과와 관계없이 작업하십시오. 헤더를 사용
- 1. twisted를 사용하여 원격 파일을 다운로드하는 방법은 무엇입니까?
- 2. 원격 파일을 다운로드하는 가장 좋은 방법
- 3. PHP를 사용하여 SFTP에서 파일을 다운로드하는 방법은 무엇입니까?
- 4. jquery를 사용하여 CSV 파일을 다운로드하는 방법은 무엇입니까?
- 5. ftp에서 파일을 다운로드하는 방법은 무엇입니까?
- 6. 다른 서버에서 파일을 다운로드하는 서버에서 파일을 다운로드하는 방법은 무엇입니까?
- 7. django를 사용하여 다운로드하는 방법은 무엇입니까?
- 8. GVIM을 사용하여 원격 파일을 편집하는 방법은 무엇입니까?
- 9. CURL을 사용하여 mp3 파일을 POST합니다.
- 10. android 에뮬레이터에서 파일을 다운로드하는 방법은 무엇입니까?
- 11. iphone/mac - AsyncSocket을 사용하여 파일을 다운로드하는 방법
- 12. 블로킹/동기 방식으로 파일을 다운로드하는 방법은 무엇입니까?
- 13. iPhone에서 웹에서 텍스트 파일을 다운로드하는 방법은 무엇입니까?
- 14. 웹 사이트를 방문하여 파일을 다운로드하는 방법은 무엇입니까?
- 15. Telerik RadEditor에서 파일을 강제로 다운로드하는 방법은 무엇입니까?
- 16. 자바 스크립트로 URL에서 파일을 다운로드하는 방법은 무엇입니까?
- 17. 프로그래밍 방식으로 웹에서 파일을 다운로드하는 방법은 무엇입니까?
- 18. iOS에서 대용량 파일을 다운로드하는 방법은 무엇입니까?
- 19. HTTPS 로그인을 통해 파일을 다운로드하는 방법은 무엇입니까?
- 20. 웹 서버에서 폴더의 파일을 다운로드하는 방법은 무엇입니까?
- 21. iPhone에 로컬로 epub 파일을 다운로드하는 방법은 무엇입니까?
- 22. javascript를 사용하여 XML 파일을 만들고 다운로드하는 방법은 무엇입니까?
- 23. jQuery를 사용하여 서버에서 직접 출력되는 zip 파일을 다운로드하는 방법은 무엇입니까?
- 24. Java 소켓을 사용하여 서버에서 파일을 다운로드하는 방법은 무엇입니까?
- 25. Objective-c를 사용하여 인터넷에서 파일을 업로드/다운로드하는 방법은 무엇입니까?
- 26. 모바일 브라우저에서 PHP를 사용하여 파일을 강제로 다운로드하는 방법은 무엇입니까?
- 27. 진행률 콜백을 사용하여 파일을 문자열로 다운로드하는 방법은 무엇입니까?
- 28. NSURLRequest/NSURLConnection을 사용하여 응용 프로그램에 mp3 파일을 다운로드하는 방법은 무엇입니까?
- 29. PHP를 사용하여 HTML을 다운로드하는 방법은 무엇입니까?
- 30. PHP curl을 사용하여 XML 응답을받는 방법은 무엇입니까?
: https://unix.stackexchange.com/questions/121314/download-only-a-part-of-a-file 당신은 올바른 그러나 나는 항상 신뢰할 수 없습니다 그리고 의존한다는 것을 발견 –