Https-POST mit Php, C#
Habe ich, um einen post zu machen, um eine Dritte Partei, die https-url abrufen von Daten procesed und zurück geschickt. Und alles, was ich als ein Beispiel ist diese:
$signature= foo_string;
$data_to_post = json_dictionary;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $base_url);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_HTTPHEADER,array("JSON-Signature: $signature"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_post);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
Als wir arbeiten mit ASP .NET C# 2.0, habe ich zu port, aber ich bekomme immer eine nicht autenticated Fehler.
Hier ist, was ich Tue:
HttpWebRequest q = (HttpWebRequest)WebRequest.Create(Host + ":" + Port);
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(new interhanse().AcceptAllCertifications);
q.Method = "POST";
q.Headers.Add("JSON-Signature:" + GetSignature(data));
q.ContentType = "application/json";
q.UseDefaultCredentials = false;
q.Credentials = new NetworkCredential(user,pwd, Host);
byte[] buffer = UTF8Encoding.UTF8.GetBytes(data);
q.ContentLength = data.Length;
Stream oStream = q.GetRequestStream();
StreamWriter oWriter = new StreamWriter(oStream);
oWriter.Write(buffer);
oWriter.Close();
HttpWebResponse reps = q.GetResponse() as HttpWebResponse;
Ich gelesen habe, alles SO Fragen, die ich finden kann über diese, aber ich bekomme keine Verbesserungen. Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, eine Sache, die Sie tun, falsch ist die Annahme, dass die Länge in bytes ist die gleiche wie die Länge in Zeichen. Sie sollten über Puffer.Länge für die Länge des Inhalts. Sie sind auch aufrufen
StreamWriter.Write
mit einem byte-array. Sie sollte das nicht tun - Sie sollten benutzen Sie einfach den stream, da hast du schon getan-Codierung:Nun, dass lösen nicht das Authentifizierungs-Problem. Sie können feststellen, dass nur die Einstellung
PreAuthenticate
löst, dass, obwohl:Wenn das nicht funktioniert, schlage ich vor, Sie laufen WireShark und Blick auf die Unterschiede zwischen den request über Curl und die Anfrage aus .NET.
Denke ich, sollten Sie nicht liefern die Gastgeber in der Authentifizierung...
Wäre so etwas wie:
Außerdem sollten Sie es vermeiden, die Zuordnung der service-point validation Delegierter, auf jede Anfrage, dies kann verlangsamen die Anforderungen zunehmend, weil die überprüfung wird mehrere Male, und es ist auch irgendwie ein Speicher-Leck.
Hier ist, wie Sie hinzufügen, dass CURLOPT_USERPWD in Asp.Net: