Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将CURL请求保存到变量中之前,如何检查其响应是文件还是HTML/文本?(PHP/CuRL)_Php_Ajax_Post_Curl - Fatal编程技术网

在将CURL请求保存到变量中之前,如何检查其响应是文件还是HTML/文本?(PHP/CuRL)

在将CURL请求保存到变量中之前,如何检查其响应是文件还是HTML/文本?(PHP/CuRL),php,ajax,post,curl,Php,Ajax,Post,Curl,我正在请求一个像Rapidshare这样的网站,作为响应,它会给我请求的文件或一些HTML,告诉我需要等待xx秒才能下载文件。 在 我不知道如何编写这个场景 现在,如果我使用HTML表单发布,在表单中设置一些字段,然后使用Javascript将其自动提交到目标站点。若下载成功,系统会提示用户是否要下载该文件,若由于某种原因(如用户需要等待)下载失败,则会将用户带到该网站的URL 避免用户重定向到目标站点错误页面。我使用的是CURL,它发送POST请求并读取响应。 现在,问题是,若CURL请求的响

我正在请求一个像Rapidshare这样的网站,作为响应,它会给我请求的文件或一些HTML,告诉我需要等待xx秒才能下载文件。 在 我不知道如何编写这个场景

现在,如果我使用HTML表单发布,在表单中设置一些字段,然后使用Javascript将其自动提交到目标站点。若下载成功,系统会提示用户是否要下载该文件,若由于某种原因(如用户需要等待)下载失败,则会将用户带到该网站的URL

避免用户重定向到目标站点错误页面。我使用的是CURL,它发送POST请求并读取响应。 现在,问题是,若CURL请求的响应是一个文件,那个么页面将保持加载,直到并且除非响应中接收到的整个文件被下载到服务器上并存储在该变量中

此函数用于在$url处发出curl请求,其中$headerz作为头值,$encoded是请求参数

 function makeCurlPostRequest($url, $headerz, $encoded){
       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       if($headerz!=null)
       curl_setopt($ch, CURLOPT_HTTPHEADER, $headerz);
       curl_setopt($ch, CURLOPT_HEADER, 1);
       curl_setopt($ch, CURLOPT_POST, 1);
       if($encoded!=null)
       curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
       curl_setopt($ch, CURLOPT_AUTOREFERER, 0);
       curl_setopt($ch, CURLOPT_REFERER, $url);
       $output = curl_exec($ch);
       curl_close($ch);
       return $output;
    }



 function checkUrl($file,$url,$headerz){
        $post_data = array ( "premium_acc" => "checked",
            "linkx" => "$file"
        );
        $encoded = '';
        foreach($post_data as $name => $value) {
          $encoded .= urlencode($name).'='.urlencode($value).'&';
        }
        $scrapHTML = makeCurlPostRequest($url, $headerz, $encoded);
        return $scrapHTML;
    }
CheckUrl,接受3个参数,$file link of file to download,$url url to request at和$headerz是头值

现在我上传了一个测试文件

a、 文本

有内容

ABCDABCDABCD

然后,在发出成功请求并使用ti在Web浏览器上打印responce后,输出此

HTTP/1.1 200确定日期:2011年7月8日星期五 07:25:43 GMT服务器:Apache/2.2.16 Debian X-Powered-By: PHP/5.3.3-7+squeeze1过期时间:周一,26 1997年7月05:00:00 GMT上次修改时间: 2011年7月8日星期五07:25:43GMT 缓存控制:没有缓存, 必须重新验证Pragma:无缓存 内容配置:filename=a.txt 连接:关闭接受范围:字节 内容长度:1内容类型: 应用程序/强制下载 ABCDABCDABCD

其中ABCDABCDABCD是TXT文件的内容。如果是音频文件,则在完全下载后会输出一些随机字符

我需要提示用户下载这些数据,而不是首先将其保存在服务器或变量中

有没有办法,我可以检查response头,如果返回的是一个文件,如果是一个文件,然后提示用户下载

这个旋度法有解吗

这个HTML表单将请求发送到目标URL,并在成功时提示用户下载文件,但问题是如果出现错误,它会将用户带到那个网站错误或等待页面,我不想让用户看到

请提供一个解决方案,可以使用curl,也可以使用HTML表单post

问候,, aqif

编辑:将其设置为发送POST变量

$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
   stream_context_get_default ( $opts );
    $headers = get_headers ( $url, true );
    if ( strstr ( $headers [ 'Content-Type' ], 'text/html' ) ){
       ....... DO YOUR CODE ..........
    }

谢谢你的回复。sget_headers$url,true仅获取响应头,但是,此请求不包含post参数,因此它将始终返回html/text,我需要在post请求中将文件名作为参数发送。简单地说,我的意思是如何使用get_headers函数Request发送参数谢谢你,它工作起来很有魅力:如果允许的话,我可以拥有你的MSN、Yahoo或skype吗?欢迎光临这是我的身份证:哈米德_udc@yahoo.com,哈米德。udc@gmail.comadded你:不可压缩的是我
    $opts = array ( 'http' => array ( 'max_redirects' => 1, 'ignore_errors' => 1 ) );
    stream_context_get_default ( $opts );
    $headers = get_headers ( $url, true );
    if ( strstr ( $headers [ 'Content-Type' ], 'text/html' ) ){
       ....... DO YOUR CODE ..........
    }
$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
   stream_context_get_default ( $opts );
    $headers = get_headers ( $url, true );
    if ( strstr ( $headers [ 'Content-Type' ], 'text/html' ) ){
       ....... DO YOUR CODE ..........
    }