PHP-fopentocurl
我正在修改我使用的基于web的系统的代码,因为在我的开发环境中,我激活了fopen()函数,但在生产环境中,出于安全原因,我没有激活该函数。 在代码中,我有以下功能:PHP-fopentocurl,php,curl,fopen,Php,Curl,Fopen,我正在修改我使用的基于web的系统的代码,因为在我的开发环境中,我激活了fopen()函数,但在生产环境中,出于安全原因,我没有激活该函数。 在代码中,我有以下功能: function PostRequest($url, $data, $optional_headers = null) { $params = array( 'http' => array( 'method' => 'POST', 'content
function PostRequest($url, $data, $optional_headers = null)
{
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
if ($optional_headers !== null)
{
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
{
die("Problem reading data from " . $url . "");
}
$response = @stream_get_contents($fp);
// var_dump($response);
if ($response == false)
{
die("Problem reading data from " . $url . "");
}
return $response;
}
我将其更改为:
function PostRequest($url, $data, $optional_headers = null)
{
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
if ($optional_headers !== null)
{
$params['http']['header'] = $optional_headers;
}
// Customizations for fopen() or curl()
if (ini_get('allow_url_fopen') == true)
{
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
if ($optional_headers !== null)
{
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
{
die("Problem reading data from " . $url . "");
}
$response = @stream_get_contents($fp);
// var_dump($response);
if ($response == false)
{
die("Problem reading data from " . $url . "");
}
return $response;
}
else
if (function_exists('curl_init'))
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $params);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
else
{
die("Problem reading data from " . $url . "");
}
}
这里的问题是这个错误:
注意:中的数组到字符串转换
/第133行的path/classes/xmwsclient.class.php API错误:无“请求”
方法:采用免疫组化方法
从我的搜索结果来看,问题在于:
curl_setopt($curl,CURLOPT_HTTPHEADER,$params)
但我不知道如何修改这段代码,因为数组$params会尽快创建:
<?php
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
if ($optional_headers !== null)
{
$params['http']['header'] = $optional_headers;
}
CURLOPT_HTTPHEADER
不接受数组[]
,这就是您在此处传递的内容
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
而且,这不是正确的使用方法。这将是您的$optional_headers
,必要时转换为字符串[]
。要设置这些参数,可以使用CURLOPT\u POST
和CURLOPT\u POSTFIELDS
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$data
必须是包含原始数据的字符串[]
,或者是包含url编码数据的字符串。传递数组将设置内容类型:多部分/表单数据
,而字符串将设置内容类型:application/x-www-form-urlencoded
有关详细信息,请参阅。您的代码在当前状态下无法读取。请添加正确的换行符和缩进。正确识别代码请@rafael通过修复格式,请使用格式发布代码我尝试过,但当我发送到post时,系统返回代码错误:史坦克斯·斯克瑞格!我将在打开下一个主题或插入下一个代码时尝试此操作!:)@拉斐尔:如果我的答案是有用的,请考虑将它标记为接受,并在投票按钮下的复选标记。