Agamemnon
Agamemnon

Reputation: 607

Using ASP.net to pass parameters to external website

I am trying to access a page where I need to log into the website and pass a a list of parameters. I appear to be able to log into the site (if I change the log in details I get a 401 unauthorised error) but then I get a 400 bad request error. The code is a bit hashed together so I know something is wrong but don't know where.

EDITED CODE

        Public Sub TestConn()


    Dim customeremailaddress As String = HttpUtility.UrlEncode("[email protected]")
    Dim customername As String = HttpUtility.UrlEncode("Ryan")
    Dim referenceid As String = HttpUtility.UrlEncode("ordertest123")
    Dim languagecode As String = HttpUtility.UrlEncode("1043")
    Dim expirydays As String = HttpUtility.UrlEncode("30")

    Dim UserName As String = "testusername"
    Dim password As String = "testpassword"
    Dim siteCredentials As New NetworkCredential(UserName, password)

    Dim URLAuth As String = "http://service.someurl.com/process.xml"
    Dim postString As String = String.Format("customeremailaddress={0}&customername={1}&referenceid={2}&languagecode={3}&expirydays={4}", customeremailaddress, customername, referenceid, languagecode, expirydays)

    Dim postBytes As Byte() = Encoding.UTF8.GetBytes(postString)

    Const contentType As String = "application/x-www-form-urlencoded"
    System.Net.ServicePointManager.Expect100Continue = False

    Dim cookies As New CookieContainer()
    Dim webRequest__1 As HttpWebRequest = TryCast(WebRequest.Create(URLAuth), HttpWebRequest)
    webRequest__1.Method = "POST"
    webRequest__1.ContentType = contentType
    webRequest__1.CookieContainer = cookies
    webRequest__1.ContentLength = postBytes.Length
    webRequest__1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"
    webRequest__1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    webRequest__1.Referer = "http://service.someurl.com/process.xml"
    webRequest__1.Credentials = siteCredentials

    Try
        Dim requestStream As Stream = webRequest__1.GetRequestStream()
        requestStream.Write(postBytes, 0, postBytes.Length)
        Dim responseReader As New StreamReader(webRequest__1.GetResponse().GetResponseStream())
        Dim responseData As String = responseReader.ReadToEnd()
        responseReader.Close()
        webRequest__1.GetResponse().Close()

    Catch ex As Exception
        Lbl_ConnTest_error.Text = ex.Message
    End Try

End Sub

Upvotes: 0

Views: 248

Answers (1)

Sani Huttunen
Sani Huttunen

Reputation: 24385

You need to send the bytes of the postString not the string itself:

Dim postBytes As Byte() = Encoding.UTF8.GetBytes(postString)
...
webRequest__1.ContentLength = postBytes.Length
...
Dim requestStream As Stream = webRequest__1.GetRequestStream()
requestStream.Write(postBytes, 0, postBytes.Length)

More information here.

Upvotes: 1

Related Questions