как использовать WebRequest для публикации файла на веб-сайте - PullRequest
0 голосов
/ 26 февраля 2019

я впервые пишу код, который отправляет веб-запрос на веб-сайт.Я получаю ошибку 403. Просто хочу, чтобы кто-то просмотрел код и дал мне знать, если я что-то упустил.Мне сказали, что мы должны использовать базовую авторизацию.Вот блок кода, где я передаю файл в процедуру POST.

    Public Sub PostFile(ByVal lFileName As String)  
    Dim request As WebRequest = WebRequest.Create("https://somewebsite.com/jobs/api/inboundjob/?message-type=distributor&format=xml")
    Dim usr As String = "jonesy@somewebsite"
    Dim pwd As String = "1Jw8$PR9Sb"
    Dim encoded As String = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(usr + ":" + pwd))
    request.Headers.Add("Authorization", "Basic " + encoded)
    request.Method = "POST"
    Dim sr As StreamReader = New StreamReader(lFileName)
    Dim postData As String = sr.ReadToEnd
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
    request.ContentType = "application/x-www-form-urlencoded"
    request.ContentLength = byteArray.Length
    Dim dataStream As Stream = request.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim response As WebResponse = request.GetResponse()
    dataStream = response.GetResponseStream()
    Dim reader As StreamReader = New StreamReader(dataStream)
    Dim responseFromServer As String = reader.ReadToEnd()
    End Sub

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 02 марта 2019

У меня нет конкретного ответа, который решит вашу проблему.Но несколько советов, которые могут помочь.

HTTP 403 ошибки

Сервер запрещает вам доступ к этому URL.Попробуйте посмотреть в ответ, используя такой инструмент, как Fiddler .Вы видите какую-либо подробную информацию?

Как обрабатывать сообщения об исключениях из WebRequest?

Вам нужно обработать WebException и получить ответиз этого.Ответ, вероятно, будет полезен.

https://docs.microsoft.com/en-us/dotnet/framework/network-programming/handling-errors

О кодировании тела HTTP

При отправке тела запроса HTTP,Я бы не использовал Encoding.UTF8.GetBytes напрямую.Я бы использовал класс StreamWriter и указал бы request.GetDataStream в конструкторе. Почему? Я не могу быть уверен в базовой кодировке строки.Пусть классы Framework узнают и выполняют соответствующее преобразование.

Документация MSDN и пример кода

https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-send-data-using-the-webrequest-class

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...