我正在尝试使用C#中的Json Post请求登录到iCloud。在尝试实施代码之前,我正在使用Chrome控制台研究一些iCloud请求,并使用Ad-on复制请求以获取网站的相同结果。通过Json Post登录到iCloud请求
首先我直接从iCloud的网站查请求:
这是响应:
{
"serviceErrors" : [ {
"code" : "-20101",
"message" : "Il tuo ID Apple o la password non sono corretti."
} ]
}
使用 “高级REST客户端” 广告的Chrome插件复制请求我已经尝试了相同的URL的相同的JSON请求。但是我得到空的响应:
我也试图复制并粘贴整个头(所有设置),比发送请求,但响应是一样的:
任何人有一个建议吗?
更新:我想实现通过C#程序JSON请求:
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://idmsa.apple.com/appleauth/auth/signin");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{accountName: \"briesanji @gmail.com\", password: \"testPassword\", rememberMe: false, trustTokens: []}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
的问题是,执行休息时
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
命中,这让我这个错误:系统。 Net.WebException:'错误远程服务器:(400)请求无效。'
更新:我以这种方式解决:
void POST(string url, string jsonContent)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(jsonContent);
request.ContentLength = byteArray.Length;
request.ContentType = @"application/json";
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
long length = 0;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
length = response.ContentLength;
}
}
catch (WebException ex)
{
// Log exception and throw as for GET example above
}
}
string GET(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
反正我还测试了答案,这是很好的。所以我检查它作为有效的感谢。
为什么C#如果你想有一个JSON请求从铬?无论如何,就我所见,您在Chrome转储和其他客户端中使用完全相同的cookie数据和相同的widgetKey。我认为你必须创建一个没有widget键的原始uri的请求,并从这个响应中获取widgetKey和cookie数据 - 然后你发送你的登录数据到这个新的uri ... **未经测试** – Michael
诺诺我想使用C#代码..但正如你可以阅读我的帖子的第一行两个..我只是想测试应该如何设置Json请求..无论如何..在我的第二个ScreenShot我做了你说的和我在AnyCase中我没有任何结果..我会尽快用C#代码更新这篇文章。 – Briesanji
在你的第二个屏幕截图中,你发送了uri中没有widgetKey的登录数据。并在你的第三个屏幕截图中使用了相同的目标URI ... – Michael