PHP - Content-type not specified assuming application/x-www-form-urlencoded

匿名 (未验证) 提交于 2019-12-03 03:04:01

问题:

For 2 days I'm having trouble with my PHP script on my server. I've changed nothing and suddenly it didn't work anymore.

Here is the code:

$query = http_build_query($data); $options = array(     'http' => array(         'header' => "Content-Type: application/x-www-form-urlencoded\r\n".                     "Content-Length: ".strlen($query)."\r\n",              'method'  => "POST",         'content' => $query,     ), ); $opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n",'method'  => 'POST',         'content' => http_build_query($data),)); $contexts = stream_context_create($opts); $context  = stream_context_create($options); $result = file_get_contents($url, false, $contexts, -1, 40000); 

I'm getting these error messages:

Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in

Warning: file_get_contents(https://mobile.dsbcontrol.de): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in

But when I try the script locally it works perfectly.

回答1:

You are passing $contexts to file_get_contents() and that only contains the User-Agent header in the $opts array. All other headers and options are in the $options array which you add in to $context but aren't using. Try:

$query = http_build_query($data); $options = array(     'http' => array(         'header' => "Content-Type: application/x-www-form-urlencoded\r\n".                     "Content-Length: ".strlen($query)."\r\n".                     "User-Agent:MyAgent/1.0\r\n",         'method'  => "POST",         'content' => $query,     ), ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context, -1, 40000); 


回答2:

While the existing answers did not work for me, I managed to solve the problem like this:

The PHP Manual says params must be an associative array in the format $arr['parameter'] = $value. Refer to context parameters for a listing of standard stream parameters.

      $header = array(             "Content-Type: application/x-www-form-urlencoded",             "Content-Length: ".strlen($postdata)         );       $packet['method'] = "POST";     $packet['header'] = implode("\r\n", $header);     $packet['content'] = $postdata;      $transmit_data = array('http' => $packet);     $context = stream_context_create($transmit_data);  


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!