使用PHP&;返回外部网页的Textarea值;卷曲
我正在尝试在提交表单,并使用PHP和cURL从“加密消息”文本区域返回结果。我可以看到包含以下代码的页面,但我不知道它是否正在提交表单,也不知道如何获得结果。另外,是的,=NXwT应该位于PGP公钥文本区域中的单独一行。任何反馈都将不胜感激!下面是我的代码:使用PHP&;返回外部网页的Textarea值;卷曲,php,html,curl,Php,Html,Curl,我正在尝试在提交表单,并使用PHP和cURL从“加密消息”文本区域返回结果。我可以看到包含以下代码的页面,但我不知道它是否正在提交表单,也不知道如何获得结果。另外,是的,=NXwT应该位于PGP公钥文本区域中的单独一行。任何反馈都将不胜感激!下面是我的代码: //create array of data to be posted $post_data['ctl00$cp$txtPublicKey'] = 'mQENBFfWrk0BCACPDJk8f6GOpQewp0AtP5CrhstpazsYP
//create array of data to be posted
$post_data['ctl00$cp$txtPublicKey'] = 'mQENBFfWrk0BCACPDJk8f6GOpQewp0AtP5CrhstpazsYPG9r+8wWamSgVYbIwdS8/bdnVdIu7Be680m3VcjtZWwG9wiomTXCx5RargREqNICigzPTU0f/CgHEMFoZQn2bWz1YXBrpYb+qgxMweVe1T4uz8sOeHzAebMAQCdNVEwDu4o90vi+Pz3jqgSEpJyhe4RqOgEdkkrtGaEUnNr2IO8gCSmPAeQW6qFNcJsl7iWfeY7LHMv6A77n/1mGhdp4h0E+V6ElUNPjeEj9I1QYSIXRxDcejvcq5HrF27DyQ1mN1TgdauAkGdqRuIJsMDmEaYtLm3fIAwpbiAcJu6fmz7eAnBz5scTlLvEZABEBAAG0GmR1c3Rpbm9ybW9uZEBjcmVpZ2h0b24uZWR1iQEcBBABAgAGBQJX1q5NAAoJEKd43LZ3nczviUoIAIAzstgpn++GAfwHs7wMdjQbKvK3LB7hZKfskiATVWxafRvNGP9Gv0PPF+ly5WLt0PjLsOc6KV98T5jtF3h0rvTZK4viZJD6JFAgiaWzL0+w5a/ksUMEgMdx4xHM/k+sSbtBlha+GI72IMsU/0dKrYkSkZ5BpUoepk5OtRvu37Pg5dSW0Zx/cd+8bnVMBK6Ri8yT0Lvg+5w0KSCn5LvXtpGKc87TJgMBHWRa3qikmw3XWqPCza+APbTjZ/WlLtA0lpP7txfbYsTQObVdiZ7DFOb1n4OxpWxrvV8e60VazKBmv4daFyim+qWySsvYCBmwn8+8r+J/5OdKhG7tAW71qxY=
=NXwT';
$post_data['ctl00$cp$txtMsgToEncrypt'] = 'Test Message';
$post_data['ctl00$cp$btnGeneratePgpKeys'] = 'Encrypt Message';
//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
$post_items[] = $key . '=' . urlencode($value);
}
//create the final string to be posted using implode()
$post_string = implode('&', $post_items);
//create cURL connection
$ch = curl_init();
// sets the cURL options
$options = array(
CURLOPT_URL => "https://www.igolder.com/PGP/encryption/",
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_ENCODING => "", // handle compressed
CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"], // name of client
CURLOPT_AUTOREFERER => true, // set referrer on redirect
CURLOPT_CONNECTTIMEOUT => 30, // time-out on connect
CURLOPT_TIMEOUT => 30, // time-out on response
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_COOKIEJAR => 'cookie.txt',
CURLOPT_COOKIEFILE => 'cookie.txt',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post_string
);
curl_setopt_array($ch, $options);
// execute cURL request
$result = curl_exec($ch);
// prints the cURL result
print_r($result);
/******* instead of printing the entire page, I want to just get the value in the textarea with the name of ctl00$cp$txtEncryptedMessage *******/
//close the connection
curl_close($ch);
?>
打印什么?怎么样print\r($result)
是否包含所需的HTML?print\r基本上打印连接信息。对不起,我应该包括在内的。我已经对结果进行了回送或打印,结果显示了网页内容,但没有显示提交的表格。我只想得到在文本区域中找到的结果。urlencode($value)
在构建POST数据字符串时是否有效?其中有一些模棱两可的字符,例如+
,您需要小心处理这些字符。远程服务器可能希望POST参数是urlencode的,如果不进行urlencode,则会将其转换为一个空格。我不是说这会解决问题,但它可能是其他问题的来源。谢谢apokryfos。我补充说,我相信表格正在提交;但是,我的问题是,如何只返回特定文本区域中的结果(例如ctl00$cp$txtEncryptedMessage)并将其存储在PHP变量中?我能返回的只是整个页面,而这个页面甚至没有在文本区域中显示结果。诀窍是让cURL请求返回正确的结果。在您的情况下,正确的结果是整个页面的文本区域中确实包含所需的文本。一旦你成功地得到了它,你就可以通过一个简单的正则表达式或HTMLDom解析器得到文本。您不能使用cURL仅请求网页的一部分。