2016-04-13 10 views
0

Ich bin ein Anfänger für die Verwendung von WebRequest in C# und ich versuche, POST-Methode zu verwenden, um meine Bestellungen im Apple Online Store (https://secure2.store.apple.com/order/list) zu überprüfen.HTTP-POST-Methode schlägt fehl

Ich möchte eine einzelne Bestellung überprüfen und festgestellt, dass ich die POST-Methode mit Parametern verwenden soll: orderLookup-order-number (Bestellnummer) und orderLookup-order-user-info (Mein Apple-Konto).

Ich habe versucht, diese zwei Parameter https://secure1.store.apple.com/us/shop/order/json/single auf https://www.hurl.it/ von schreiben:

Post an: https://secure1.store.apple.com/us/shop/order/json/single

parameter1: orderLookup-Auftragsnummer Wert: [Bestell-Nr]

parameter2: orderLookup -order-user-info Wert: [Apple ID]

und erfolgreich eine Rendite erhalten. Wenn ich es jedoch in C# mache, scheitere ich. Kann jemand bitte meine Fehler aufzeigen? Meine Funktion ist wie folgt.

bool TryPostMethodToGetHtmlText(string orderNo, string accountNo, out string htmlText) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://secure1.store.apple.com/us/shop/order/json/single"); 
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"; 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    var postData = "orderLookup-order-number=" + orderNo; 
     postData += "&orderLookup-order-user-info="; 
     postData += HttpUtility.UrlEncode(accountNo); 
    byte[] postBytes = Encoding.ASCII.GetBytes(postData); 
    request.ContentLength = postBytes.Length; 
    using (Stream st = request.GetRequestStream()) 
    { 
     st.Write(postBytes, 0, postBytes.Length); 
    } 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     Stream receiveStream = response.GetResponseStream(); 
     StreamReader readStream = null; 

     if (response.CharacterSet == null) 
     { 
      readStream = new StreamReader(receiveStream); 
     } 
     else 
     { 
      readStream = new StreamReader(receiveStream, Encoding.GetEncoding(65001)); 
     } 
     htmlText = readStream.ReadToEnd(); 
     response.Close(); 
     readStream.Close(); 
     return true; 
    } 
    htmlText = string.Empty; 
    return false; 
} 

Ich habe einen Fehler 503, wenn ich die HttpWebResponse bekommen wollte. Vielen Dank.

+0

503 zeigt Service nicht verfügbar an. – gypsyCoder

+0

@gypsyCoder Vielen Dank für Ihre Antwort, aber ich kann eine Antwort erhalten, wenn ich keine Parameter für die POST-Methode übergeben – user

+0

Beste Schätzung ist die Authentifizierung. Die Webanforderung ist nicht authentifiziert, daher gibt Ihnen der Server keinen Zugriff auf die Daten. Überprüfen Sie die API zur Authentifizierung. (request + auth cookie? auth header in request?) –

Antwort

0

Diese Lösung funktioniert.

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://secure1.store.apple.com/us/shop/order/json/single"); 

     request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"; 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 

     var postData = "orderLookup-order-number=" + orderNo; 
     postData += "&orderLookup-order-user-info="; 
     postData += HttpUtility.UrlEncode(accountNo); 


     try 
     { 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       Stream receiveStream = response.GetResponseStream(); 
       StreamReader readStream = null; 

       if (response.CharacterSet == null) 
       { 
        readStream = new StreamReader(receiveStream); 
       } 
       else 
       { 
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(65001)); 
       } 
       htmlText = readStream.ReadToEnd(); 
       response.Close(); 
       readStream.Close(); 
      } 
      htmlText = string.Empty; 
     } 
     catch (WebException e) 
     { 
      htmlText = string.Empty; 
     } 

     HttpWebRequest requestForStream = (HttpWebRequest)WebRequest.Create("https://secure1.store.apple.com/us/shop/order/json/single"); 
     requestForStream.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"; 
     requestForStream.Method = "POST"; 
     requestForStream.ContentType = "application/x-www-form-urlencoded"; 

     byte[] postBytes = Encoding.ASCII.GetBytes(postData); 
     requestForStream.ContentLength = postBytes.Length; 
     using (Stream st = requestForStream.GetRequestStream()) 
     { 
      st.Write(postBytes, 0, postBytes.Length); 
     } 
+0

Tut mir leid, ich weiß nicht, wie Ihre Lösung funktioniert, können Sie das bitte erklären? Vielen Dank – user