关于一个post 请求对应https 网站

mjay0210 2013-07-22 05:52:50
最近要用到百度的api
对一个https 的网站发个post请求
但是各种401

网上能找的方法基本试了一遍
但是基本上还是没什么改变。

包括周公的那篇 如何 对http/https 发送 post 改变ssl callback 一样无法解决。

地址放在这里,请各位大神帮帮忙。

能post 后获得文字信息就行。
浏览器可以轻松打开,但是用c# webclient httprequest 访问均为401 错误。

https://openapi.baidu.com/oauth/2.0/token?
grant_type=client_credentials&
client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&
client_secret= 0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&





得到的回文应该是酱紫


"access_token": "1.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-2346678-124328",
"expires_in": 86400,
"session_key": "ANXxSNjwQDugf8615OnqeikRMu2bKaXCdlLxn",
"session_secret": "248APxvxjCZ0VEC43EYrvxqaK4oZExMB",


只要能出东西就行啊

流程走通。剩下都好说。
...全文
512 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ahoo 2013-07-23
  • 打赏
  • 举报
回复

看一下百度API提供的授权是否有问题
Ahoo 2013-07-23
  • 打赏
  • 举报
回复
你使用 浏览器 返回的 状态码也是 401啊 ,亲。
mjay0210 2013-07-23
  • 打赏
  • 举报
回复
有没有大神能看一看啊
mjay0210 2013-07-23
  • 打赏
  • 举报
回复
引用 1 楼 lizhi3186575 的回复:
我用浏览器不能打开你给出的链接的
{"error":"invalid_client","error_description":"Client authentication failed"} 看到这个就对了 出字就行。 关键用程序访问是401
mjay0210 2013-07-23
  • 打赏
  • 举报
回复


依旧这个问题 求解。。。。。。。

而且你这个方法我已经用过了 不管用。
hyblusea 2013-07-23
  • 打赏
  • 举报
回复
附一个我的 HttpHelper:

namespace QQ
{
    public class HttpHelper
    {
        private readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

        public HttpWebResponse HttpGetRequest(string url, string referer, int? timeout, CookieCollection cookies)
        {
            HttpWebRequest request = null;  

            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                request = WebRequest.Create(url) as HttpWebRequest;
                request.ProtocolVersion = HttpVersion.Version10;
            }
            else
                request = WebRequest.Create(url) as HttpWebRequest;

            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";
            request.UserAgent = DefaultUserAgent;
            request.CookieContainer = new System.Net.CookieContainer();

            if (!string.IsNullOrEmpty(referer))
                request.Referer = referer;

            if (timeout.HasValue)
                request.Timeout = timeout.Value;
            else
                request.Timeout = 25000;

            if (cookies != null)
            {
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.Add(cookies);
            }

            return request.GetResponse() as HttpWebResponse;  
        }

        public HttpWebResponse HttpPostRequest(string url, string referer, string postData, CookieCollection cookies, string contentType = null)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.CookieContainer = new System.Net.CookieContainer();
            request.Timeout = 65000;            

            UTF8Encoding encoding = new  System.Text.UTF8Encoding();
            byte[] data = encoding.GetBytes(postData);

            request.Method = "POST";

            if (!string.IsNullOrEmpty(contentType))
                request.ContentType = contentType;
            else
                request.ContentType = "application/x-www-form-urlencoded";

            request.ContentLength = data.Length;
            request.KeepAlive = true;

            if(!string.IsNullOrEmpty(referer))
                request.Referer = referer;

            if (cookies != null)
                request.CookieContainer.Add(cookies);

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            return request.GetResponse() as HttpWebResponse;
        }

        private  bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;
        } 
    }
}
hyblusea 2013-07-23
  • 打赏
  • 举报
回复
看API是Get 还是Post, Get的话, 用你的浏览器直接打开链接, 如果同样返回 401,应该再仔细看看API的说明文档 , 从参数中有一个 client_id 猜测, 估计在调用这个API之前需要进行登陆授权,如果是那后续的操作均需要附带上Cookies, 以及Referer等
please_call_me_J 2013-07-23
  • 打赏
  • 举报
回复
我表示打开你给的url弹出下载框,然后就是“无法下载来自XXXXX”
Johnyin 2013-07-23
  • 打赏
  • 举报
回复
你要访问的URL 是用百度帐户登录过才可以访问到吧. 如果这样的话,你还得模拟登录,取得百度给你的token,这样你的程序对这个URL才有访问权限. 你先用浏览器登录后,获取一个带token的URL后,让程序去直接访问是不行的.
Ahoo 2013-07-22
  • 打赏
  • 举报
回复

        public string CretRequest()
        {
            Uri uri = new Uri("https://localhost");
            HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
            //验证服务器证书回调自动验证 ****关键****            
            ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream stream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(stream);
            return streamReader.ReadToEnd();
        }

        /// <summary>
        /// 请求响应时SSL证书验证
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="certificate"></param>
        /// <param name="chain"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        { // 总是接受 
            return true;
        }

人生导师 2013-07-22
  • 打赏
  • 举报
回复
我用浏览器不能打开你给出的链接的

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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