PHP + curl,HTTP POST示例代码?
任何人都可以告诉我如何做一个HTTP POST的PHP卷曲?
我想发送这样的数据:
username=user1, password=passuser1, gender=1
到www.domain.com
我期望curl返回result=OK
。 有没有例子?
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// in real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
// further processing ....
if ($server_output == "OK") { ... } else { ... }
?>
因为这个线程对于用PHP发送curl文件的结果很高,我想提供最有效的答案,因为上面和下面的所有其他人都做不必要的工作,而答案非常简单:
程序
// set post fields
$post = [
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
];
$ch = curl_init('http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump($response);
面向对象
<?php
namespace MyAppHttp;
class Curl
{
/** @var resource cURL handle */
private $ch;
/** @var mixed The response */
private $response = false;
/**
* @param string $url
* @param array $options
*/
public function __construct($url, array $options = array())
{
$this->ch = curl_init($url);
foreach ($options as $key => $val) {
curl_setopt($this->ch, $key, $val);
}
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
}
/**
* Get the response
* @return string
* @throws RuntimeException On cURL error
*/
public function getResponse()
{
if ($this->response) {
return $this->response;
}
$response = curl_exec($this->ch);
$error = curl_error($this->ch);
$errno = curl_errno($this->ch);
if (is_resource($this->ch)) {
curl_close($this->ch);
}
if (0 !== $errno) {
throw new RuntimeException($error, $errno);
}
return $this->response = $response;
}
/**
* Let echo out the response
* @return string
*/
public function __toString()
{
return $this->getResponse();
}
}
// usage
$curl = new MyAppHttpCurl('http://www.example.com', array(
CURLOPT_POSTFIELDS => array('username' => 'user1')
));
try {
echo $curl;
} catch (RuntimeException $ex) {
die(sprintf('Http error %s with code %d', $ex->getMessage(), $ex->getCode()));
}
这里需要注意的是:最好用getResponse()
方法创建一些名为AdapterInterface
的接口,并让上面的类实现它。 然后,您可以随时将此实现与另一个类似的适配器交换,而不会对应用程序产生任何副作用。
使用HTTPS /加密流量
在Windows操作系统下,通常PHP的cURL存在问题。 在尝试连接到HTTPS保护的端点时,您会收到错误消息,告知您certificate verify failed
。
大多数人在这里做的是告诉cURL库忽略证书错误并继续( curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
)。 由于这会使你的代码工作,你会引入巨大的安全漏洞,并使恶意用户对你的应用程序执行各种攻击,如中间人攻击等。
永远不要这样做。 相反,您只需修改您的php.ini
并告诉PHP您的CA Certificate
文件的位置是否允许它正确验证证书:
; modify the absolute path to the cacert.pem file
curl.cainfo=c:phpcacert.pem
最新的cacert.pem
可以从互联网下载或从您最喜爱的浏览器中提取。 当更改任何php.ini
相关设置时,请记住重新启动您的网络服务器。
一个使用php curl_exec做一个HTTP帖子的实例:
把它放在一个名为foobar.php的文件中:
<?php
$ch = curl_init();
$skipper = "luxury assault recreational vehicle";
$fields = array( 'penguins'=>$skipper, 'bestpony'=>'rainbowdash');
$postvars = '';
foreach($fields as $key=>$value) {
$postvars .= $key . "=" . $value . "&";
}
$url = "http://www.google.com";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, 1); //0 for a get request
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close ($ch);
?>
然后使用命令php foobar.php
运行它,它将这种输出转储到屏幕上:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Title</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<body>
A mountain of content...
</body>
</html>
所以你做了一个PHP POST到www.google.com并发送了一些数据。
如果服务器被编程为读取变量后,它可以决定做一些不同的事情。
链接地址: http://www.djcxy.com/p/8601.html