zoukankan      html  css  js  c++  java
  • 新浪微博SDK开发注意事项(一)

    1生成Oauth_Nonce

    新浪的Oauth_Nonce是ASCII编码 所有随机生成的时候是只要数字就行 而OAuth标准好像是可以有字母大小写

    2中文编码

    中文采用Uri.EscapeDataString进行编码的话能够避免+号的问题

    (至于具体怎么回事看这个http://www.cnblogs.com/guangrou/archive/2011/02/25/1965294.html

    这里提供两个编码的方法

    /// <summary>
    /// URL encodes a string based on section 5.1 of the OAuth spec.
    /// Namely, percent encoding with [RFC3986], avoiding unreserved characters,
    /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
    /// </summary>
    /// <param name="value"></param>
    /// <seealso cref="http://oauth.net/core/1.0#encoding_parameters" />
    public static string UrlEncodeStrict(string value)
    {
    // 忽略掉%否则签名会出错
    var original = value;
    var ret = original.Where(
    c => !Unreserved.Contains(c) && c != '%').Aggregate(
    value, (current, c) => current.Replace(
    c.ToString(), c.ToString().PercentEncode()
    ));
    return ret.Replace("%%", "%25%"); // Revisit to encode actual %'s
    }
    public static string PercentEncode(this string s)
    {
    var bytes = s.GetBytes();
    var sb = new StringBuilder();
    foreach (var b in bytes)
    {
    // [DC]: Support proper encoding of special characters (\n\r\t\b)
    if((b > 7 && b < 11) || b == 13)
    {
    sb.Append(string.Format("%0{0:X}", b));
    }
    else
    {
    sb.Append(string.Format("%{0:X}", b));
    }
    }
    return sb.ToString();
    }
    
    /// <summary>
    /// URL encodes a string based on section 5.1 of the OAuth spec.
    /// Namely, percent encoding with [RFC3986], avoiding unreserved characters,
    /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
    /// </summary>
    /// <param name="value"></param>
    /// <seealso cref="http://oauth.net/core/1.0#encoding_parameters" />
    public static string UrlEncodeRelaxed(string value)
    {
    return Uri.EscapeDataString(value);
    }
    
    
           /// <summary>
            /// URL encodes a string based on section 5.1 of the OAuth spec.
            /// Namely, percent encoding with [RFC3986], avoiding unreserved characters,
            /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
            /// </summary>
            /// <param name="value"></param>
            /// <seealso cref="http://oauth.net/core/1.0#encoding_parameters" />
     
            public static string UrlEncodeStrict(string value)
            {
                // 忽略掉%否则签名会出错
                var original = value;
                var ret = original.Where(
                    c => !Unreserved.Contains(c) && c != '%').Aggregate(
                        value, (current, c) => current.Replace(
                              c.ToString(), c.ToString().PercentEncode()
                              ));
                return ret.Replace("%%", "%25%"); // Revisit to encode actual %'s
            }
            public static string PercentEncode(this string s)
            {
                var bytes = s.GetBytes();
                var sb = new StringBuilder();
                foreach (var b in bytes)
                {
                    // [DC]: Support proper encoding of special characters (\n\r\t\b)
                    if((b > 7 && b < 11) || b == 13)
                    {
                        sb.Append(string.Format("%0{0:X}", b));
                    }
                    else
                    {
                        sb.Append(string.Format("%{0:X}", b));
                    }
                }
                return sb.ToString();
            }
            /// <summary>
            /// URL encodes a string based on section 5.1 of the OAuth spec.
            /// Namely, percent encoding with [RFC3986], avoiding unreserved characters,
            /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
            /// </summary>
            /// <param name="value"></param>
            /// <seealso cref="http://oauth.net/core/1.0#encoding_parameters" />
            public static string UrlEncodeRelaxed(string value)
            {
                return Uri.EscapeDataString(value);
            }
    其中的中文内容最好进行两次UrlEncodeRelaxed否则的话如果本来发布的微博内容就是已经进行UTF8编码过的汉字的话 再编码会出现于本来中文一样的情况 原因在于UrlEncodeStrict进行编码的话编码前后不会发生变化的

    3上传图片

    关于上传图片 Upload接口上传图片Header里要有要加入Status信息 如这样

    --REQUEST: http://api.t.sina.com.cn
    POST /statuses/upload.json HTTP/1.1
    Authorization: OAuth oauth_consumer_key="2404507248",oauth_token="435df4f2525c99f5b337bb79900a5d8c",oauth_nonce="5277664",oauth_timestamp="1299923945",oauth_signature_method="HMAC-SHA1",oauth_signature="UOsrFw6oX3%2FA4P%2Fb%2BVGbQK5ty7k%3D",oauth_version="1.0",
    Content-Type: multipart/form-data; boundary=a00d9f7b-2a78-4cbb-a8a7-1cec8b92735b
    --a00d9f7b-2a78-4cbb-a8a7-1cec8b92735b
    Content-Disposition: form-data; name="status"
     
    %E6%88%91
    --a00d9f7b-2a78-4cbb-a8a7-1cec8b92735b
    Content-Disposition: form-data; name="pic"; filename="bmp148.jpg"
    Content-Type: application/octet-stream
     
    [FILE DATA][System.Text.Latin1Encoding]
    --a00d9f7b-2a78-4cbb-a8a7-1cec8b92735b--

    另外图片文件不要使用Content-Disposition: file要使用Content-Disposition: form-data

    觉得这点不太好,应该是开放平台的工程师有什么考虑才这么设计的吧

  • 相关阅读:
    三、在Canvas中使用WebGL
    二、认识Canvas
    一、WebGL概述
    给XXX客户服务器转移过程中的重大失误
    centos运行netcore error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
    centos运行netcore error:package: ‘Microsoft.AspNetCore.Antiforgery‘, version: ‘2.0.3‘
    React.js 三周 -- 入门到搭建团队基础项目
    Javascript百学不厌
    Javascript百学不厌
    Javascript百学不厌
  • 原文地址:https://www.cnblogs.com/zhuo/p/1982577.html
Copyright © 2011-2022 走看看