WebClient mit iso-8859-1 nur über application/x-www-form-urlencoded?

10/10/2007 - 22:06 von Klaus P. Pieper | Report spam
Hallo,

von einem C# Programm aus werden Daten mit POST an einen (PHP) Webserver
gesendet. Dieser erwartet die Daten in der Codierung iso-8859-1. Das
klappt auch, allerdings nur wenn alle Daten vorher über
HttpUtility.UrlEncode umgewandelt werden und ein Header
application/x-www-form-urlencoded mitgesendet wird. Geht das auch ohne
UrlEncode (also als Binàrdaten) mit einem anderen Content-Type im Header?

Danke & Gruß

Klaus

Der funktionierende Code:

// Alle POST Daten umwandeln
byte[] NameValueCollectionEncoding(NameValueCollection data,
string encoding)
{
Encoding enc = Encoding.GetEncoding(encoding);
StringBuilder builder = new StringBuilder();
foreach (string name in data)
{
string encodedName = HttpUtility.UrlEncode(name, enc);
string encodedValue = HttpUtility.UrlEncode(data[name], enc);
builder.Append(encodedName);
builder.Append('=');
builder.Append(encodedValue);
builder.Append('&');
}
builder.Remove(builder.Length - 1, 1);
byte[] bytes = Encoding.ASCII.GetBytes(builder.ToString());
return bytes;
} // end NameValueCollectionEncoding()

void Test(XmlDocument doc)
{
WebClient client = new WebClient();
byte[] clientResponse = null;

client.Encoding Encoding.GetEncoding(Properties.Settings.Default.webencoding);
NameValueCollection clientValueCollection new NameValueCollection();

// POST Daten anlegen
clientValueCollection.Add("uid", Properties.Settings.Default.webuid);
clientValueCollection.Add("pwd", Properties.Settings.Default.webpwd);
clientValueCollection.Add("bmedata", doc.InnerXml);
clientValueCollection.Add("par1", Properties.Settings.Default.webpar1);
clientValueCollection.Add("par2", Properties.Settings.Default.webpar2);
clientValueCollection.Add("par3", Properties.Settings.Default.webpar2);

// Authentifizierung
if (Properties.Settings.Default.webauthtype != string.Empty)
{
client.Credentials = this.credCache;
}

try
{
// POST Daten umwandeln
byte[] encodedValues NameValueCollectionEncoding(clientValueCollection,
Properties.Settings.Default.webencoding);

// Dieser Header wird benötigt, sonst wird nichts übertragen
// oder erkannt
client.Headers["Content-Type"] "application/x-www-form-urlencoded; charset=" +
Properties.Settings.Default.webencoding;
// UploadValues kann man nicht benutzen, da sonst alles mit UTF-8
// übertragen würde
clientResponse client.UploadData(
Properties.Settings.Default.webuploaduri, encodedValues)

}
catch (WebException ex)
{
MessageBox.Show(ex.ToString());
Close();
return;
}
} // end Test()


reply pub . pieper ibeq
to kp3 . at . com
 

Lesen sie die antworten

#1 Christoph Schneegans
10/10/2007 - 22:44 | Warnen spam
Klaus P. Pieper schrieb:

von einem C# Programm aus werden Daten mit POST an einen (PHP) Webserver
gesendet.



Also an ein PHP-Skript.

Dieser erwartet die Daten in der Codierung iso-8859-1. Das klappt auch,
allerdings nur wenn alle Daten vorher über HttpUtility.UrlEncode umgewandelt
werden und ein Header application/x-www-form-urlencoded mitgesendet wird.
Geht das auch ohne UrlEncode (also als Binàrdaten) mit einem anderen



Das kommt auf das Skript an. Woher sollen wir wissen, was das Skript kann?

Dein Code ist soweit in Ordnung und làßt sich AFAICS auch nicht wesentlich
vereinfachen; der WebClient hat leider keine Unterstützung für andere
Codierungen als UTF-8 eingebaut.

<http://schneegans.de/web/xhtml/> · Klare Antworten zu XHTML

Ähnliche fragen