繁体   English   中英

在 PHP cURL 帮助中传递凭据

[英]passing credentials in PHP cURL help

我正在尝试将凭据传递给网站,以便可以在其上使用 file_get_contents 来提取一些数据,但它不起作用,我得到一个空白页,所以知道这里有什么问题吗?

<?php


$username="munged@ring.gil.com";
$password="Koin";

$url="confluence.rogersdigitalmedia.com";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

$str= file_get_contents("confluence.rogersdigitalmedia.com/display/prodsupport/Team+Calendar");
echo $str;
?>

这是新代码,当我确实获得内容时,它仍然无法工作卡在登录屏幕上......截屏

<?php
$username="munged@gil.ro.com";
$password="Koin";

$url="confluence.rogersdigitalmedia.com";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


//Replaced due to special chars in url for username and pass
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_USERPWD, urlencode($username) . ':' . urlencode($password));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

echo file_get_contents('http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407');
?>

新代码:我知道$url是我必须登录的 URL ,但是我在$data中输入了什么? 我知道这是我的登录信息,但我该如何输入(例如,<username> 空格 <password>)?

<?php
function do_post_request($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) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

您可能需要转义用户名中的@

 curl_setopt($ch, CURLOPT_USERPWD, urlencode($username). ':'. urlencode($password));

这是因为某些字符(例如@: )在 URL 中具有特殊含义。 您需要对它们进行转义,以便服务器将它们视为字符,而不是指示有关 HTTP 请求的内容。

报废这一切。 您的编辑表明您对 HTTP 的工作原理存在根本性的误解。 您不能使用 CURL 将 HTTP 登录凭据传递到需要填写 web 表单然后希望能够使用单独的file_get_contents登录的站点。

就您实际执行此操作的方式而言...首先,确定该站点是否有 API。 如果没有,请查明他们是否真的希望您进行屏幕抓取。 对不允许的网站进行屏幕抓取是非常糟糕的形式。 事实上,这很可能违反了版权法。

其次,对 API 进行编程。 这意味着以网站强制执行的方式登录。 这将包含表单值(您可能需要在CURLOPT_POSTFIELDS中发送)和 cookies (您需要在每个请求中使用它,可能使用CURLOPT_COOKIEFILE )。

努力理解客户端-服务器关系是如何工作的,研究 API,不要只是在问题上扔代码并期望它能够工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM