通过cUrl + JS跨域发送发布数据的正确方法

问题描述

以前,由于数据传递不正确,我遇到了很多问题。我需要从我的站点进行跨域的后请求,因此我编写了一个PHP cUrl脚本来执行此操作,并编写了js函数,该函数调用通过URL和发布数据的脚本向该脚本发出发布请求:

post.js

function postcross(path,data,cook,run)
{
requestp('post.PHP','url='+path+'&data='+data+'&cook='+cook,run); // cook - deprecated
}

function requestp(path,run)
{
var http = new XMLHttpRequest();
http.open('POST',path,true);

http.setRequestHeader('Content-type','application/x-www-form-urlencoded');

http.onreadystatechange = function() 
{  
     if(http.readyState == 4 && http.status == 200)
    {
        run(http);
    }
}

http.send(data);
}

post.PHP

<?PHP
function request($url,$post,$cook) // $cook - deprecated
{
sleep(2);
$header_size = 0;
{
$ch = curl_init();
$cookie_file_path = "cookies.txt";

curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_URL,$url);
//curl_setopt($ch,CURLOPT_CUSTomrEQUEST,"POST");
curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,($post));
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file_path);
curl_setopt($ch,CURLOPT_COOKIEJAR,CURLOPT_USERAGENT,'"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.102 Safari/537.36)"');

curl_setopt($ch,CURLOPT_ENCODING,'UTF-8');
curl_setopt ( $ch,CURLOPT_RETURNTRANSFER,1 );
curl_setopt ( $ch,CURLOPT_CONNECTTIMEOUT,30 );
curl_setopt ( $ch,CURLOPT_TIMEOUT,10 );
curl_setopt ( $ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt ( $ch,CURLOPT_SSL_VERIFYPEER,CURLOPT_SSL_VERIFYHOST,true);

$result = curl_exec($ch);

$response = $result;
if (! $response) {
    echo "Curl errno: " . curl_errno ( $ch ) . " (" . $url . " postdata = $postData )\n";
    echo "Curl error: " . curl_error ( $ch ) . " (" . $url . " postdata = $postData )\n";
    $info = curl_getinfo($ch);
    echo "HTTP code: ".$info["http_code"]."\n";
    // exit();
}
}

return $result;
}

$result = request($_POST['url'],$_POST['data'],$_POST['cook']);

if ($result === FALSE) 
 echo('error');
else
 echo($result);

?>

该如何使用:我正在另一个网站上进行发布请求,请打开Chrome开发工具,复制编码的源请求正文,然后将其粘贴到js中的某个字符串中。然后致电:

postcross(encodeURIComponent('http://somesite.com/script.aspx'),encodeURIComponent(data),function(e){
   //someContainer.innerText = e.responseText;
});

var data = 'some%24param=already_encoded_UNICODE_value&__ANOTHERParaM=note_that_equality_sign_and_&_is_not_encoded&anyParam=any stuff here';

那不能正常工作-我得到了我需要的页面,但是由于错误,那个东西没有被填充。

正如我提到的,之前我在登录时遇到了问题,但是后来我解决了,您可以看到正确的解决方案是有效的。但是在那种情况下,我传递的所有数据都由js脚本抓取,而不是devtools中的常量字符串。

无论如何,我想知道在我的情况下传递帖子数据的最正确方法是什么,因为我看到了答案,在这里人们说正确的答案是偶数

var data = encodeURIComponent('param')+'='+ encodeURIComponent('value'+'&');

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)