如何使用curl将数据服务器发送到另一个服务器?

tv6aics1  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(168)

为了清楚起见,我希望包含表单的页面(page1.php)检查用户从其他服务器页面(https://anotherserver.com/checker)输入的数据,并将其发送到page1.php,作为true或false。这是我第一次使用curl。我看不到任何与此代码有关的内容。
这是我的表单页面代码page1.php

function dataFn($url, $data = array()) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 3000);
    $data = curl_exec($curl);
    curl_close($curl);
    return json_decode($data, true);
}

$data = dataFn(base64_encode('my base64 key'), ['value1' => $value2, 'value2' => $value2]);

var_dump($data);
die();

if (!$data) {
    // some err
} else {
    if ($data['status'] == 0) {
        // some code
    }
}

这是我的checker服务器页面

<?php 
// validation page
    print_r($_POST['value1']);
?>
nwnhqdif

nwnhqdif1#

你没有犯太多的错误。它肯定不会与你的代码。
两种方法来制作你的帖子数据。

$post = 'key1=value1&key2=value2&key3=value3';
$post = array('key1'=>value1,'key2'=>value2,'key3'=>'value3');

根据数据的不同,您可能需要使用urlencode()

$post = urlencode($post);

我做了很多 curl 这些是我的标准后选项

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
curl_setopt($ch, CURLOPT_ENCODING,"");

这些是我的故障排除选项

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);

您需要查看请求(输出)和响应头(输入),因此您需要这两个选项。
这两个选项必须在解决问题后才能出来。

curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);

如果是HTTPS,则需要以下选项:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);

我总是制作我自己的请求头。你可以删除这个选项,它不是强制性的。

$request = array();
$request[] = "Host: www.example.com";
$request[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$request[] = "User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0";
$request[] = "Accept-Language: en-US,en;q=0.5";
$request[] = "Connection: keep-alive";
$request[] = "Cache-Control: no-cache";
$request[] = "Pragma: no-cache";

如果您在进行POST时遇到问题,请查看发送和接收的标头。

$data = curl_exec($ch);
if (curl_errno($ch)){echo 'Error: ' . curl_error($ch);}

有时我会将所有响应curl信息保存为文本,有时会将其保存为echo

$info = rawurldecode(var_export(curl_getinfo($ch),true));
echo rawurldecode(var_export(curl_getinfo($ch),true));

您需要从curl_getinfo()中得到CURLINFO_HEADER_OUT
然后你就可以看到你真正发送的内容了。

echo curl_getinfo($ch,CURLINFO_HEADER_OUT);

http响应ID非常重要。

$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_getinfo中有很多信息,可能会给予你其他提示。
如果我有网址,我肯定能让它工作。

相关问题