首页 > 解决方案 > PHP CURL 显示没有基本身份验证的“content_type”

问题描述

相同的代码在两个环境(本地主机和本地开发)中都可以正常工作,但在第三个环境(产品)中却不行。第三个是VPS。我必须对我正在连接的 API 使用基本身份验证。

这是我的代码:

$curl = curl_init();
//For basic auth
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "SomeUsername:AndItPass");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
));
$result = curl_exec($curl);
dump($curl);die();

正常工作时的输出dump($curl);die();(如在本地主机中)是:

curl resource @61 ▼
  url: "http://XXXXX:8089/api/usuarios/login?perfil=2&rutPoem=76279543&rut=18863583"
  content_type: "application/json; charset=utf-8"
  http_code: 200
  header_size: 259
  request_size: 194
  filetime: -1
  ssl_verify_result: 0
  redirect_count: 0
  total_time: 0.022104
  namelookup_time: 3.9E-5
  connect_time: 0.008342
  pretransfer_time: 0.008463
  size_upload: 0.0
  size_download: 251.0
  speed_download: 11355.0
  speed_upload: 0.0
  download_content_length: 251.0
  upload_content_length: -1.0
  starttransfer_time: 0.022072
  redirect_time: 0.0
  redirect_url: ""
  primary_ip: "XXXXXXXX"
  certinfo: []
  primary_port: 8089
  local_ip: "192.168.4.108"
  local_port: 64594
}

但是在VPS中我得到了这个:

curl resource @345 ▼
  url: "http://XXXXX:8089/api/usuarios/login?perfil=2&rutPoem=76279543&rut=18863583"
  content_type: null
  http_code: 0
  header_size: 0
  request_size: 0
  filetime: -1
  ssl_verify_result: 0
  redirect_count: 0
  total_time: 0.200986
  namelookup_time: 0.000126
  connect_time: 0.0
  pretransfer_time: 0.0
  size_upload: 0.0
  size_download: 0.0
  speed_download: 0.0
  speed_upload: 0.0
  download_content_length: -1.0
  upload_content_length: -1.0
  starttransfer_time: 0.0
  redirect_time: 0.0
  redirect_url: ""
  primary_ip: ""
  certinfo: []
  primary_port: 0
  local_ip: ""
  local_port: 0
}

怎么了?如果我做一个,我有“空”dump(curl_error($curl));

标签: phpcurl

解决方案


正如您问题的评论中所讨论的那样,在我看来您的 IP 已被阻止。您可以通过在 cURL 请求中加载代理来检查这一点。如果请求未被阻止,则意味着您的服务器 IP 已被服务器防火墙列入黑名单。您可以要求 API 所有者解除对您的 IP 的阻止,但也可以确保您首先了解您是如何被列入黑名单的,以使您的应用程序符合远程服务器规则。


推荐阅读