- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我写信是为了编写一个 C# 方法来为 Twitter 生成身份验证 header 。我正在尝试通过此 API 搜索 Twitter:https://api.twitter.com/1.1/search/tweets.json .
这是我调用的 URL:
https://api.twitter.com/1.1/search/tweets.json?q=%23countryman+OR+%23johncooperworks+OR+%40mini%26since_id%3d24012619984051000%26max_id%3d250126199840518145%26result_type%3dmixed%26count%3d4
这是我的方法:
private string GetTwitterAuthHeader()
{
const string oauthConsumerKey = "";
const string oauthConsumerSecret = "";
const string oauthToken = "";
const string oauthTokenSecret = "";
const string oauthVersion = "1.0";
const string oauthSignatureMethod = "HMAC-SHA1";
var oauthNonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture)));
var timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var oauthTimestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString(CultureInfo.InvariantCulture);
const string resourceUrl = "https://api.twitter.com/1.1/search/tweets.json";
const string baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}";
var baseString = string.Format(baseFormat,
oauthConsumerKey,
oauthNonce,
oauthSignatureMethod,
oauthTimestamp,
oauthToken,
oauthVersion
);
baseString = string.Concat("GET&", Uri.EscapeDataString(resourceUrl), "&", Uri.EscapeDataString(baseString));
var compositeKey = string.Concat(Uri.EscapeDataString(oauthConsumerSecret),
"&", Uri.EscapeDataString(oauthTokenSecret));
string oauthSignature;
using (var hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey)))
{
oauthSignature = Convert.ToBase64String(
hasher.ComputeHash(Encoding.ASCII.GetBytes(baseString)));
}
const string headerFormat = "OAuth oauth_consumer_key=\"{0}\", " +
"oauth_nonce=\"{1}\", " +
"oauth_signature=\"{2}\", " +
"oauth_signature_method=\"{3}\", " +
"oauth_timestamp=\"{4}\", " +
"oauth_token=\"{5}\", " +
"oauth_version=\"{6}\"";
var authHeader = string.Format(headerFormat,
Uri.EscapeDataString(oauthConsumerKey),
Uri.EscapeDataString(oauthNonce),
Uri.EscapeDataString(oauthSignature),
Uri.EscapeDataString(oauthSignatureMethod),
Uri.EscapeDataString(oauthTimestamp),
Uri.EscapeDataString(oauthToken),
Uri.EscapeDataString(oauthVersion)
);
return authHeader;
}
Lỗi tôi nhận được là:
{
"errors": [
{
"message": "Bad Authentication data",
"code": 215
}
]
}
有什么指点吗?
我是否需要在生成授权 header 时考虑实际的搜索查询? (例如,我附加到搜索 API 的值)?
我发现很难调试。
Cảm ơn!
biên tập:
根据反馈,这里有一个更新:
var resourceUrl = "https://api.twitter.com/1.1/search/tweets.json";
const string baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}";
var baseString = string.Format(baseFormat,
oauthConsumerKey,
oauthNonce,
oauthSignatureMethod,
oauthTimestamp,
oauthToken,
oauthVersion,
truy vấn
);
baseString = string.Concat("GET&",
Uri.EscapeDataString(resourceUrl), "&",
Uri.EscapeDataString(baseString));
已阅读https://dev.twitter.com/oauth/overview/creating-signatures靠近点,这似乎是对的。尽管如此,我还是遇到了同样的错误。
câu trả lời hay nhất
将您的“查询”包装在 Uri.EscapeDataString()
ở giữa.
如果我这样做,您上面的确切代码对我有用。也就是说,您真的应该转义tất cả 那些参数键和值,而且我有点困惑为什么 nonce 在没有转义的情况下工作,因为它是 base64 编码的。但也许我只是在测试中很幸运,没有遇到带有斜线的随机数。
关于c# - 使用 C# 创建用于搜索的 Twitter 授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25771970/
Tôi gặp sự cố khi thêm biểu tượng tùy chỉnh cho nền DMG trong gói độc lập được xây dựng cho MacOSX. Tôi đã thêm một gói vào thư mục gốc của dự án. Đang tải các biểu tượng tùy chỉnh từ nó, nhưng không phải biểu tượng nền DMG. Tôi đang sử dụng Java fx 2.2.
Sự khác biệt giữa Qt cho Symbian và Qt cho MeeGo là gì? Tôi biết Qt là một nền tảng biên dịch chéo. Điều này có nghĩa là nếu tôi sử dụng thư viện từ Qt, thì thư viện đó sẽ hoạt động trên tất cả các thiết bị hỗ trợ Qt (ví dụ: Sym
Tôi đang cố gắng chạy bản sao lưu cơ sở dữ liệu SQL Server bằng C# .NET 3.5/4.0 một cách thực tế. Tôi đã tìm ra cách thực hiện việc này nhưng dường như tôi không thể tìm thấy thư viện vùng tên để sao lưu. Tôi đang tìm Microsoft.Sq
Gần đây tôi học Java rất nhiều, nhưng tôi thường là nhà phát triển .NET. (Vì vậy, hãy tha thứ cho những câu hỏi dành cho người mới sử dụng của tôi.) Trong .Net, tôi có thể phát triển các trang ASP.Net mà không cần sử dụng IIS vì nó có một trang web được đơn giản hóa
Bài đăng này chỉ hoạt động nếu bạn có chuỗi trong lệnh in. Bây giờ tôi có một lượng lớn mã nguồn chứa một câu lệnh như in sữa,bơ phải được định dạng là in (sữa,bơ) Việc chụp cuối dòng bằng \n không thành công
Vì vậy, câu hỏi của tôi là: https://Gist.github.com/panSarin/4a221a0923927115584a Khi tôi lưu biểu mẫu này, tôi gặp lỗi trong tiêu đề NoMethodError (u
Làm cách nào để phát âm thanh Html5 khi nhấp chuột? (ogg dành cho các trình duyệt như Firefox, mp3 dành cho các trình duyệt như chrome) Cho đến nay tôi có thể thay đổi thành một loại tệp duy nhất thông qua onclick, nhưng tôi không thể làm như bình thường
Sự khác biệt nếu it1 và it2 là gì? std::set s; auto it1 = std::inserter(s, s.begin()); auto it2 = std::inserter(s, s.en
4.0.0 com.amkit myapp SpringMVCFirst
Tôi hiện đang sử dụng Eclipse làm IDE cho các ngôn ngữ khác và tôi đã quen với việc không cần phải rời khỏi IDE để làm bất cứ điều gì - nhưng tôi thực sự đang gặp khó khăn khi tìm cách thiết lập tương tự hoặc tương tự cho ECMAScript-262 thuần túy. Để làm rõ, tôi không tìm kiếm DO
Tôi muốn gửi cấu trúc C# có mảng chuỗi tới hàm C++ chấp nhận void * làm cấu trúc c# và char** làm thành viên mảng chuỗi cấu trúc c#. Tôi có thể gửi cấu trúc tới hàm c++, nhưng vấn đề là không thể lấy cấu trúc đó từ hàm c++
Tôi đang làm việc với các liên kết được tạo động: Tôi muốn thêm một trình chuyển đổi tùy chỉnh vào f:param để xóa khoảng trắng khỏi #{name}, v.v. Nhưng không có công cụ chuyển đổi nào trong f:param
Có thể tạo bộ nhớ đệm ghi sau hoặc ghi qua cho .NET bằng Redis không? Lý tưởng nhất là một bộ đệm trong suốt được ghi bởi một quy trình duy nhất và hỗ trợ tải dữ liệu bị thiếu từ cơ sở dữ liệu và thường xuyên duy trì các khối bẩn? Tôi đã tìm kiếm hàng giờ, có thể là trên Google
Tôi đang làm việc trên một tập lệnh ssh thực thi các lệnh thông qua bash. FILENAMES=( "export_production_20200604.tgz" "export_production_log_2020060
Tôi cần biểu thức chính quy cho các lần xuất hiện từ 0 đến 7 chữ cái hoặc 0 đến 7 số. Ví dụ: khớp: 1234, asdbs không khớp: 123456789, absbsafsfsf, asf12 Tôi đã thử ([a-zA-Z]{0
Tôi có một bảng cho các kỳ kế toán có ngày bắt đầu và ngày kết thúc cho ngày cuối và đầu kỳ. Tôi sử dụng bảng này để xác định thời điểm diễn ra giao dịch dịch vụ và thời điểm thu thập doanh thu trong các truy vấn như... SELECT p.PeriodID, p.FiscalY
Tôi gặp sự cố khi xây dựng xác thực biểu thức chính quy cho Laravel chỉ chấp nhận ký tự hoặc số. Nó như thế này: Xin chào <- Được rồi 123 <- Được rồi Xin chào 123 <- Không. Biểu thức chính quy hiện tại của tôi là như thế này: [A-Za-z]|[0-9]. đăng ký
Bạn thực sự sẽ làm gì với OnItemDataBound trên Repeater? Câu trả lời hay nhất "Sự kiện này mang đến cho bạn cơ hội cuối cùng để truy cập mục dữ liệu trước khi nó được khách hàng hiển thị. Sau khi sự kiện này được nêu ra, mục dữ liệu sẽ bị xóa và không còn khả dụng."
Tôi có một dự án mà đoạn này hoạt động tốt, tôi đang sử dụng actionbarsherlock của jeremyfeinstein và menu trượt, mọi thứ đều hoạt động tốt, nhưng khi tôi muốn tùy chỉnh ô danh sách ngăn kéo bên trái, tôi gặp một ngoại lệ
Trong vài ngày qua, tôi dường như đang phân chia thời gian của mình một cách đồng đều giữa việc xây dựng ứng dụng đầu tiên của mình và đăng câu hỏi ở đây!! Đây là ứng dụng đầu tiên của tôi và cũng là ứng dụng đầu tiên mà các nhà thiết kế của chúng tôi đã hoàn thành. Tôi cố gắng thỏa mãn cái nhìn và cảm nhận về những gì anh ấy đang làm, nhưng tôi không nghĩ anh ấy đang làm đúng.
Tôi là một lập trình viên xuất sắc, rất giỏi!