有人能告诉我如何用HTTP POST做一个PHP cURL吗?
我想这样发送数据:
username=user1, password=passuser1, gender=1
到www.example.com
我希望cURL返回result=OK这样的响应。有什么例子吗?
有人能告诉我如何用HTTP POST做一个PHP cURL吗?
我想这样发送数据:
username=user1, password=passuser1, gender=1
到www.example.com
我希望cURL返回result=OK这样的响应。有什么例子吗?
当前回答
最简单的是以application/json的形式发送数据。这将接受一个数组作为输入,并正确地将其编码为json字符串:
$data = array(
'field1' => 'field1value',
'field2' => 'field2value',
)
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resultStr = curl_exec($ch);
return json_decode($resultStr, true);
其他回答
curlPost('google.com', [
'username' => 'admin',
'password' => '12345',
]);
function curlPost($url, $data) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error !== '') {
throw new \Exception($error);
}
return $response;
}
我很惊讶没有人建议file_get_contents:
$url = "http://www.example.com";
$parameters = array('username' => 'user1', 'password' => 'passuser1', 'gender' => '1');
$options = array('http' => array(
'header' => 'Content-Type: application/x-www-form-urlencoded\r\n',
'method' => 'POST',
'content' => http_build_query($parameters)
));
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
这很简单,很有效;我把它用在两端都能控制代码的环境中。
更好的方法是使用json_decode(并设置代码以返回JSON)
$result = json_decode(file_get_contents($url, false, $context), TRUE);
这种方法在幕后调用curl,但不需要经历那么多困难。
从Stack Overflow上其他地方的原始答案提炼出来的答案: PHP将变量发送到file_get_contents()
一个使用php curl_exec来做一个HTTP post的实例:
把它放在一个名为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,并向其发送了一些数据。
如果服务器被编程为读入post变量,它可以基于此决定做一些不同的事情。
下面是PHP + curl的一些样板代码 http://www.webbotsspidersscreenscrapers.com/DSP_download.php
包含在这些库中将简化开发
<?php
# Initialization
include("LIB_http.php");
include("LIB_parse.php");
$product_array=array();
$product_count=0;
# Download the target (store) web page
$target = "http://www.tellmewhenitchanges.com/buyair";
$web_page = http_get($target, "");
...
?>
如果您要将信息传递到您自己的网站,一个更简单的答案是使用SESSION变量。开始php页面:
session_start();
如果在某些情况下,您希望在PHP中生成信息并将其传递到会话中的下一页,则不要使用POST变量,而是将其分配给session变量。例子:
$_SESSION['message']='www.'.$_GET['school'].'.edu was not found. Please try again.'
然后在下一页中只需引用这个SESSION变量。注意:在你使用它之后,一定要销毁它,这样它就不会在使用后继续存在:
if (isset($_SESSION['message'])) {echo $_SESSION['message']; unset($_SESSION['message']);}