나는 HTML 페이지와 이미지를 얻기위한 기본 스크립트를 만들었습니다. 하지만 사진을 검색하는 동안 계속 연결 상태를 유지하고 싶습니다.
- 테스트 스크립트로 수행 한 작업은 웹 서버에서 주소를 묻는 메시지가 계속 표시됩니다. 그러나 그것은 효과가 없었습니다.
그럼 어떻게해야합니까? 아니면 내가 잘못 했나요?fsockopen으로 이미지를 다운로드하도록 연결되어 있습니까?
Basic 스크립트 :
function fetch($server, $url, $port = 80, &$resp_head)
{
if (!$con = @fsockopen($server, $port, $error_number, $error_string, 30)) return False;
stream_set_timeout($con, 8600);
// Reguest
$qry_header = 'GET '.$url." HTTP/1.1\r\n";
$qry_header .= 'Host: '.$server."\r\n";
$qry_header .= 'User-Agent: Mihtyom; (+http://'.$_SERVER['HTTP_HOST']."/)\r\n";
$qry_header .= "Accept: */*\r\n"; //google check the 3 "Accept"
$qry_header .= "Accept-Language: *\r\n";
$qry_header .= "Accept-Encoding: *\r\n";
$qry_header .= "Connection: Close\r\n\r\n";
fwrite($con, $qry_header);
$inheader = True;
$data = '';
while (!feof($con))
{
$line = fgets($con);
if (!$inheader)
{
$data .= $line;
continue;
}
if ($line == "\n" || $line == "\r\n")
{
$inheader = False;
continue;
}
$resp_head[] = trim($line);
}
fclose($con);
return $data;
}
테스트 스크립트를
function fetch($server, $urls, $port = 80, &$resp_head)
{
if (!$con = @fsockopen($server, $port, $error_number, $error_string, 30)) return False;
stream_set_timeout($con, 8600);
$resp_head = array();
$data = array();
foreach ($urls as $key => $url)
{
$inheader = True;
$data[$key] = '';
// Reguest
$qry_header = 'GET '.$url." HTTP/1.1\r\n";
$qry_header .= 'Host: '.$server."\r\n";
$qry_header .= 'User-Agent: Mihtyom; (+http://'.$_SERVER['HTTP_HOST']."/)\r\n";
$qry_header .= "Accept: */*\r\n"; //google check the 3 "Accept"
$qry_header .= "Accept-Language: *\r\n";
$qry_header .= "Accept-Encoding: *\r\n";
$qry_header .= "Connection: Close\r\n\r\n";
fwrite($con, $qry_header);
while (!feof($con))
{
$line = fgets($con);
if (!$inheader)
{
$data[$key] .= $line;
continue;
}
if ($line == "\n" || $line == "\r\n")
{
$inheader = False;
continue;
}
$resp_head[$key][] = trim($line);
}
}
fclose($con);
return $data;
}
새로운 스크립트 (21-07-12 12시 34분) :
function fetch($server, $urls, $port = 80, &$resp_head)
{
if (!$con = @pfsockopen($server, $port, $error_number, $error_string, 30)) return False;
stream_set_timeout($con, 8600);
$resp_head = array();
$data = '';
$i = count($urls);
foreach ($urls as $key => $url)
{
$i--;
// Reguest
$qry_header = 'GET '.$url." HTTP/1.1\r\n";
$qry_header .= 'Host: '.$server."\r\n";
$qry_header .= 'User-Agent: Mihtyom; (+http://'.$_SERVER['HTTP_HOST']."/)\r\n";
$qry_header .= "Accept: */*\r\n";
$qry_header .= "Accept-Language: *\r\n";
$qry_header .= "Connection: ".($i == 0 ? 'Close' : 'keep-alive')."\r\n\r\n";
fwrite($con, $qry_header);
}
while (!feof($con))
{
$line = fgets($con);
if ($line == "\r\n\r\n" || $line == "\n\n") break;
$data .= $line;
}
fclose($con);
return $data;
}
별도의 출력물로 읽는 것이 좋습니다. [원시 HTTP 요청을 할 때 HTTP 청크 인코딩 된 문자열을 쉽게 디코딩하는 방법?] (http://stackoverflow.com/questions/10793017/how-to-easily-decode-http-chunked-encoded-string-when-making- 원시 http 요청) –