file_get_contents 错误的请求

ByLia 2012-09-03 11:28:15

nice2
file_get_contents 错误的请求
nice2 发表于 9-3 11:28 1分钟前, 0回/0阅 ( 编辑|删除 )
讨论区 » 技术问答
分享到
新浪微博腾讯微博
收藏+0
举报
踩 顶 0

我用 php 的 file_get_conten 获取地址返回信息,出现[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad request

这个错误信息,

allow_url_fopen = On 这个也是开启的,

我试着用 curl 发送请求

结果 直接是

400 bad request

现在不知道怎么解决了
...全文
448 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baokuikui 2012-09-04
  • 打赏
  • 举报
回复
你请求的是哪个URL啊贴出来 我试一下???
xuzuning 2012-09-04
  • 打赏
  • 举报
回复
4xx 客户机中出现的错误
400 错误请求 — 请求中有语法问题,或不能满足请求。
401 未授权 — 未授权客户机访问数据。
402 需要付款 — 表示计费系统已有效。
403 禁止 — 即使有授权也不需要访问。
404 找不到 — 服务器找不到给定的资源;文档不存在。
heyli 2012-09-04
  • 打赏
  • 举报
回复
是不是有空格 把空格替换成%20 话说我昨天才搞了一个 给你参考下

$token_api = 'https://api.weibo.com/oauth2/access_token';
$data = array(
'client_id' => $_SESSION['sina_token'],
'client_secret' => $_SESSION['sina_token_secret'],
'grant_type' => 'authorization_code',
'redirect_uri' => $_SESSION['callback'],
'code' => $_REQUEST['code'],
);
$postdata = http_build_query($data);
$postdata = str_replace(" ", '%20', $postdata);
$opts = array(
'http' => array(
'method'=>"POST",
'header'=>"POST /oauth2/access_token HTTP/1.0\r\n User-Agent: Sae T OAuth2 v0.1\r\n Host: api.weibo.com\r\n Accept: */*\r\n Accept-Encoding: deflate, gzip\r\n API-RemoteIP: ".$_SERVER["REMOTE_ADDR"]."\r\n Content-Length: ".strlen($postdata)."\r\n Content-Type: application/x-www-form-urlencoded",
'timeout'=>30,
)
);

$context = stream_context_create($opts);
$result = @file_get_contents($token_api.'?'.$postdata,false,$context);
黄袍披身 2012-09-04
  • 打赏
  • 举报
回复
噢哦噢 跟404给串一块了
检查自己的url请求吧,这个有问题。输出你的地址 到浏览器上打开一下

[Quote=引用 2 楼 的回复:]

newnew 400是请求出错才对拉。。。

引用 1 楼 的回复:

你获取的地址页面不存在.要解决的是你的url是否正确
[/Quote]
ByLia 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你请求的是哪个URL啊贴出来 我试一下???
[/Quote]

那是其他平台接口,不能泄露的,问题已经解决了.
url 中多了一个空格,但是很难发现
黄袍披身 2012-09-03
  • 打赏
  • 举报
回复
你获取的地址页面不存在.要解决的是你的url是否正确
baokuikui 2012-09-03
  • 打赏
  • 举报
回复
/*模拟浏览器的参数*/
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";
// 模拟获取内容函数
function vget($url, $ip, $user_agent)
{
$curl = curl_init (); // 启动一个CURL会话
//if (IS_PROXY) {
curl_setopt($curl, CURLOPT_PROXY, $ip); //代理服务器地址,格式:8.8.8.8:8080
//}
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent); // 模拟用户使用的浏览器
@curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
//curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 读取上面所储存的Cookie信息,如果有登录验证的才要用到
curl_setopt($curl, CURLOPT_TIMEOUT, 1200); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec ($curl); // 执行操作

if (curl_errno($curl))
{
echo 'Errno' . curl_error($curl);
}

curl_close ($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据
}



试一试吧! 不行再说
ci1699 2012-09-03
  • 打赏
  • 举报
回复
newnew 400是请求出错才对拉。。。

[Quote=引用 1 楼 的回复:]

你获取的地址页面不存在.要解决的是你的url是否正确
[/Quote]

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧