1
<?php 
$curl = curl_init (); 
$headers = array ( 
    "Content-Type: application/json", 
    "ulogin : abc",           
    "Authorization : abcdefgh"
); 
curl_setopt ( $curl, CURLOPT_HTTPHEADER, $headers );
curl_setopt ( $curl, CURLOPT_URL, "http://localhost:8080/api/orders/209");
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );

$result = curl_exec ( $curl );

if ($result === false) {
   die ( 'Error fetching data: ' . curl_error ( $curl ) );
} else {
   var_dump ( $result );
}
curl_close ( $result );

?>

url 是一个 java rest api 服务。在服务端收到此 GET 请求时,所有标头值都显示为空。我用设置了标题的邮递员测试了该服务,并且它通过了。不确定我在 php 代码中缺少什么。

我的服务中的代码片段:

public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest httpRequest = (HttpServletRequest) req;
        String token = httpRequest.getHeader("Authorization");
        String userEmail = httpRequest.getHeader("ulogin");
}

更新
我用邮递员和一个示例 java 客户端进行了测试。两者都有效。仅从 php 无法正常工作。

     public static void main(String[] args) throws ClientProtocolException, IOException {
      HttpClient client = new DefaultHttpClient();
      HttpGet request = new HttpGet("http://localhost:8080/api/order/165");
      request.addHeader("Content-Type", "application/json");
      request.addHeader("ulogin", "abc");         r 
      request.addHeader("Authorization", "abcdefg");
      HttpResponse response = client.execute(request);
      BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
      System.out.println( response.getHeaders("Authorization"));

     }      

更新2

使用 get_file_contents 也可以

  $url = "http://localhost:8080/api/order/165";

  $options = array(
 'http'=>array(
 'method'=>"GET",
 'header'=>"Content-Type: application/json\r\n" .
          "ulogin: abc\r\n" .     
          "Authorization:abcdefg\r\n"       
  )
  );

  $context = stream_context_create($options);
  $file = file_get_contents($url, false, $context);
  var_dump($file);
4

2 回答 2

0

我不确定,但如果你想要包含标题,有一个选项

CURLOPT_HEADER  TRUE to include the header in the output.

php.net 卷曲

于 2015-08-05T07:05:34.767 回答
0

您在 php.ini 中设置标头的方式没有任何问题。

当您调用显示请求的标头的 php 脚本时,它会显示您设置的 3 个标头。将以下代码粘贴到新的 php 文件中,并使用您当前的代码调用它。你会看到它工作得很好。

var_dump(getallheaders());

curl_close 中的一个小注释,您需要添加 curl 处理程序而不是您的解析结果。更改以下行

curl_close ( $result );

curl_close( $curl );
于 2015-08-05T07:06:33.573 回答