我正在嘗試使用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