问题描述
以前,由于数据传递不正确,我遇到了很多问题。我需要从我的站点进行跨域的后请求,因此我编写了一个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 (将#修改为@)