我正在尝试创建一个C#应用程序,该应用程序登录到Pinger Textfree帐户并可以从中发送SMS消息。此服务的Web版本是基于闪存的,因此我一直在使用Fiddler和Wireshark来监视它使用的HTTP请求。我写了一些我认为应该登录的代码,但是我得到了一个" Bad Credentials"但是,我确实知道我使用的用户名和密码是准确的。我也很确定他们不会追加任何额外的东西,正如我在Fiddler中看到的那样。
static void Main(string[] args)
{
// Connect as client to port 443
string server = "api.pinger.com";
TcpClient client = new TcpClient(server, 443);
// Create a secure stream
using (SslStream sslStream = new SslStream(client.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null))
{
sslStream.AuthenticateAsClient(server);
byte[] data = System.Text.Encoding.ASCII.GetBytes("POST https://api.pinger.com/1.0/web/login HTTP/1.1\r\n" +
"Host: api.pinger.com\r\n" +
"Connection: keep-alive\r\n" +
"Origin: http://pinger.com\r\n" +
"X-Rest-Method: POST\r\n" +
"Authorization: OAuth realm=\"https://api.pinger.com\", oauth_consumer_key=\"textfree-in-flash-web-free\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"HNN8gdLdskKnrtK2jbyN68b9JWQ%3D\", oauth_timestamp=\"1406102776\", oauth_nonce=\"635733471764340000\"\r\n" +
"Content-Type: application/json\r\n" +
"Accept: */*\r\n" +
"Referer: http://pinger.com/tfw/textFree_web.swf\r\n" +
"Accept-Encoding: gzip,deflate,sdch\r\n" +
"Accept-Language: en-US,en;q=0.8\r\n\r\n" +
//json info
"{\"password\":\"testing\",\"username\":\"myquestion\",\"clientId\":\"textfree-in-flash-web-free-1406143265-10D066F9-8126-CD00-4C3D-64AB7BA4FF52\"}\r\n"
);
sslStream.Write(data);
data = new byte[client.ReceiveBufferSize];
int bytesRead = -1;
do
{
bytesRead = sslStream.Read(data, 0, data.Length);
using (MemoryStream ms = new MemoryStream(data, 0, bytesRead))
using (StreamReader rd = new StreamReader(ms))
{
string returnData = rd.ReadToEnd();
Console.WriteLine(returnData);
}
} while (bytesRead != 0);
Console.ReadKey();
}
}
PS我用这些凭据(用户:myquestion,Pass:testing)创建了这个问题,因为它们是正确的,它应该正常工作。
我正在使用我用Fiddler录制的请求的标题和格式。
我猜这个尝试失败的原因是我要么没有正确发布json,要么授权标题不正确或者是" clientId"关键在json。我做了很多试验和错误以及研究,我们将不胜感激。