在进行PHP编程中,经常会涉及到对远程URL的访问和传参,此时php curl就显得尤为重要。其中,setdooutput是curl函数中常用的一种方法。通过对setdooutput方法的应用,我们可以控制curl向远程URL的输出流中写入什么信息,从而实现多种功能,比如模拟表单提交、写数据到远程文件、发送SOAP请求等。下面我们就具体的来看看setdooutput的使用方法及相关知识点。setdooutput的使用方法setdooutput方法的用法非常简单,它只有一种参数类型:bool类型。这个参数表示是否开启输出流,默认为false。我们只需要一个简单的代码就可以看出这个方法的处理过程。
$ch = curl_init(); // 初始化curlcurl_setopt($ch, CURLOPT_URL, 'http://www.example.com/submit.php'); // 设置URLcurl_setopt($ch, CURLOPT_POST, true); // 开启POST传参curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=bar&bar=baz'); // 设置表单参数curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回结果不输出curl_setopt($ch, CURLOPT_HEADER, false); // 不返回header信息curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证证书// 这里是重点curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 60); $response = curl_exec($ch);
上述代码中,我们使用curl_init函数初始化一个curl对象,然后通过curl_setopt函数来设置一系列参数,包括URL、POST方法、表单参数、返回结果、关闭header信息以及跟随重定向。这些设置在之前的文章中已经详细讲解过了,这里不再讲述。具体到setdooutput方法,我们首先需要在第二次调用curl_setopt的时候开启输出流:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_VERBOSE, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_TIMEOUT, 60);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_TIMEOUT, 60);
在第二次调用curl_setopt时,我们使用curl_setopt函数设置了参数CURLOPT_RETURNTRANSFER为true,这个参数实际上是告诉curl,我们需要将远程URL的返回信息存储到一个变量中,而不是直接输出到浏览器中。因为这次请求需要写入数据,所以需要发送POST请求,通过设置CURLOPT_POSTFIELD参数为$post_data就可以实现,其中,$post_data为存放表单数据的变量。在多个传递方式中,我们需要自定义传递方式,这时候就可以使用setdooutput方法,打开输出流,从而将数据写入到远程文件或某个地址。需要注意的是,setdooutput方法只有在CURLOPT_POST与CURLOPT_CUSTOMREQUEST参数都为POST时才生效。setdooutput的一些注意事项1. setdooutput和CURLOPT_POSTFIELD同时使用时,post数据会被写入到输出流中。需要设置好data_length选项,否则服务器无法处理数据。2. setdooutput和CURLOPT_UPLOAD同时使用时,post数据会被写入到输出流中。需要设置好data_length选项,否则服务器无法处理数据。3. setdooutput仅在HTTP请求时使用。结语通过上面的简单示例,我们可以看到,setdooutput是curl函数中非常重要的方法。通过打开输出流,我们可以控制curl向远程URL的输出流中写入什么信息,从而实现多种功能。虽然setdooutput在使用时操作相对简单,但还是需要注意一些相关的注意事项。仔细掌握setdooutput的使用方法,可以更好的发挥curl函数的优势和功能,帮助我们更好的进行编程。