Я тиринг, чтобы написать в Fritz! Box Phonebook по SOAP запросу, но он не будет работать. Я получил ошибку 403, неверные аргументы.
Вот мой код: < /p>
private async void SendPhonebookToFBoxAction(object obj)
{
string fritzBoxUrl = "http://fritz.box"; // Default FritzBox URL
string username1 = settingsModel.FBoxUsername; // Default FritzBox username
string password1 = AESHelper.DecryptWithDPAPI(Convert.FromBase64String(settingsModel.FBoxPassword.EncryptedPassword)); // Decrypt the password using DPAPI
//var handler = new HttpClientHandler();
//var client1 = new HttpClient(handler);
var byteArray = Encoding.ASCII.GetBytes($"{username1}:{password1}"); // Create a base64 encoded string for Basic Authentication
//client1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); // Set the Authorization header for Basic Authentication
var handler = new HttpClientHandler
{
Credentials = new NetworkCredential(username1, password1)
};
using (var client = new HttpClient(handler))
{
// Implementation for sending phonebook to FritzBox
// This method can be implemented later as per requirements, eventually asynchronously
string newPhonebookEntryData = //@"" +
@"" +
@"0" +
"" +
"" +
"";
Debug.WriteLine($"SOAP Body: {soapBody}"); // Log the SOAP body for debugging
var request1 = (HttpWebRequest)WebRequest.Create(url);
request1.Method = "POST";
request1.ContentType = "text/xml; charset=\"utf-8\" ";
//request1.Headers.Add("SOAPACTION", $"\"urn:dslforum-org:service:X_AVM-DE-Phonebook:1#AddPhonebookEntry\""); // Set the SOAP action header
request1.Headers.Add("SOAPACTION", $"\"{service}#{action}\""); // Set the SOAP action header
request1.Credentials = new NetworkCredential(settingsModel.FBoxUsername, password1); // Set the credentials for the request
using (var stream = await request1.GetRequestStreamAsync())
using (var writer = new StreamWriter(stream))
{
writer.Write(soapBody);
}
try
{
using (var response = (HttpWebResponse)await request1.GetResponseAsync())
using (var reader = new StreamReader(response.GetResponseStream()))
{
string result = await reader.ReadToEndAsync();
Debug.WriteLine($"Response: {result}");
}
}
catch (WebException ex)
{
using (var reader = new StreamReader(ex.Response.GetResponseStream()))
{
string errorResponse = reader.ReadToEnd();
Debug.WriteLine($"Error: {errorResponse}");
MessageBox.Show($"Error sending phonebook entry: {errorResponse}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
< /code>
Я попробовал запрос SOAP, используя NewPhoneBookEntry, NewPhoneBookEntryData, с и без блока CDATA в блоке SOAP запроса. Ничего не работает. Я получил сообщение об ошибке 402 - неверные аргументы - каждый раз.Error:
s:Client
UPnPError
402
Invalid Args
Подробнее здесь: https://stackoverflow.com/questions/796 ... -phonebook