Einen Webservice mit asp.net aufrufen, der Cookies benötigt

asp.net c# html-agility-pack web-services

Frage

Ich versuche, das HTML Agility Pack zu verwenden, um die Liste der Anwälte unter http://www.dlapiper.com/global/people/search.aspx?gLastName=A zu scrappen . Die Seite verwendet Ajax, um die Namen zu füllen, also hatte ich kein Glück, diese Serverseite zu machen. Ich bemerkte, dass die Seite einen Webservice unter http://www.dlapiper.com/FCWSite/DlaPiperWS/Attorneys.asmx?op=FindAttorneys aufruft, also versuche ich, den gleichen Webservice von meiner Anwendung aus aufzurufen.

Ich verwende den folgenden Code, aber es gibt einen internen Serverfehler 500 zurück, von dem ich vermute, dass ich einen Sitzungscookie benötige? (da die Seite nicht funktioniert, wenn ich Cookies deaktiviere)

Kann jemand helfen?

private static string WebServiceCall()
{

    WebRequest webRequest = WebRequest.Create("http://www.dlapiper.com/FCWSite/DlaPiperWS/Attorneys.asmx?op=FindAttorneys");
    HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
    httpRequest.Method = "POST";
    httpRequest.ContentType = "text/xml; charset=utf-8";
    httpRequest.Headers.Add("SOAPAction: http://tempuri.org/");
    httpRequest.ProtocolVersion = HttpVersion.Version11;
    Stream requestStream = httpRequest.GetRequestStream();
    //Create Stream and Complete Request             
    StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);
    string request = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><FindAttorneys xmlns='FCWSite.FCWSite.DlaPiperWS'><scFirstName></scFirstName><scLastName>A</scLastName><scKeyword></scKeyword><scOfficesGUID></scOfficesGUID><scSpokenLanguagesGUID></scSpokenLanguagesGUID><scServicesGUID></scServicesGUID><scRegionGUID></scRegionGUID><scSchoolGUID></scSchoolGUID><scAdmissionGUID></scAdmissionGUID><scLevelGUID></scLevelGUID><strLanguageGUID>7483b893-e478-44a4-8fed-f49aa917d8cf</strLanguageGUID><strCountry>global</strCountry><returnUntranslated>true</returnUntranslated><sortBy>name</sortBy><page>0</page></FindAttorneys></soap:Body></soap:Envelope>";

    streamWriter.Write(request);
    streamWriter.Close();
    //Get the Response    
    HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
    StreamReader srd = new StreamReader(wr.GetResponseStream());
    string resulXmlFromWebService = srd.ReadToEnd();
    return resulXmlFromWebService;
}

Akzeptierte Antwort

Wie ich in meinem Kommentar erwähnt habe .. Ich habe die Attorney.asmx URL als Web-Referenz in meinem Projekt hinzugefügt.

Wenn ich dies tue, lasse ich die Web-Referenz den Namensraum der Referenz "com.dlapiper.www" haben.

Das Folgende ist in vb.net und repräsentiert eine Standard-Standardseite. Die Klasse com.dlapiper.www.Attorneys stellt den Kontext der Verbindung dar.

Beachten Sie, dass Attorneys.FindAttorney einen Zeichenfolgenwert zurückgibt.

Außerdem können Sie von meinem Puffer und array.convertAll Versuch im Code sehen, dass ich verschiedene Kodierungen versuchte .. wenn Sie versuchen, FindAttorney aufzurufen, ohne den Plätzchenbehälter und die folgenden Plätzchen hinzuzufügen. Sie erhalten falsch eine SOAP-Ausnahme Angabe der Lokalisierungs-GUID war nicht in einer richtigen Eingabe.

Ich habe diesen etwas irrelevanten Teil im Code gelassen, weil ich ein Fan der kontravarianten Programmierung bin.

Die Wahrheit ist, dass dieser Parameter nicht leer sein kann, aber nicht von der Funktion verwendet wird. Der Cookie-Name: Wert ist.

VB.NET

Public Class _Default
    Inherits System.Web.UI.Page

    Dim AttorneyList As com.dlapiper.www.Attorneys = New com.dlapiper.www.Attorneys()
    Dim attys As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim buffer As Byte()
        buffer = Array.ConvertAll(Of Char, Byte)("7483b893e47844a48fedf49aa917d8cf".ToUpper.ToCharArray(), New Converter(Of Char, Byte)(AddressOf CharToBuffer))

        Dim cookieLanguage As System.Net.Cookie = New System.Net.Cookie
        cookieLanguage.Domain = "www.dlapiper.com"
        cookieLanguage.Name = "Language"
        cookieLanguage.Value = UTF8Encoding.ASCII.GetString(buffer)
        cookieLanguage.Path = "/"

        Dim cookieLocalization As System.Net.Cookie = New System.Net.Cookie
        cookieLocalization.Domain = "www.dlapiper.com"
        cookieLocalization.Name = "Localization"
        cookieLocalization.Value = "TimeZone=0&UsesDaylightSavings=False&TimeZoneAbbrev=IDLW&Persists=True"
        cookieLocalization.Path = "/"

        Dim cookieCulture As System.Net.Cookie = New System.Net.Cookie
        cookieCulture.Domain = "www.dlapiper.com"
        cookieCulture.Name = "DefaultCulture"
        cookieCulture.Value = "en-US"
        cookieCulture.Path = "/"

        Dim cookieHideNotice As System.Net.Cookie = New System.Net.Cookie
        cookieHideNotice.Domain = "www.dlapiper.com"
        cookieHideNotice.Name = "hide-cookie-notice"
        cookieHideNotice.Value = "1"
        cookieHideNotice.Path = "/"

        Dim cookieMode As System.Net.Cookie = New System.Net.Cookie
        cookieMode.Domain = "www.dlapiper.com"
        cookieMode.Name = "Mode"
        cookieMode.Value = "1"
        cookieMode.Path = "/"

        Dim cookieNavId As System.Net.Cookie = New System.Net.Cookie
        cookieNavId.Domain = "www.dlapiper.com"
        cookieNavId.Name = "NavId"
        cookieNavId.Value = "1074"
        cookieNavId.Path = "/"

        Dim cookiePortletId As System.Net.Cookie = New System.Net.Cookie
        cookiePortletId.Domain = "www.dlapiper.com"
        cookiePortletId.Name = "PortletId"
        cookiePortletId.Value = "12601"
        cookiePortletId.Path = "/"

        Dim cookieSERVER_PORT As System.Net.Cookie = New System.Net.Cookie
        cookieSERVER_PORT.Domain = "www.dlapiper.com"
        cookieSERVER_PORT.Name = "SERVER_PORT"
        cookieSERVER_PORT.Value = "80"
        cookieSERVER_PORT.Path = "/"

        Dim cookieSiteId As System.Net.Cookie = New System.Net.Cookie
        cookieSiteId.Domain = "www.dlapiper.com"
        cookieSiteId.Name = "SiteId"
        cookieSiteId.Value = "1039"
        cookieSiteId.Path = "/"

        Dim cookieZoneId As System.Net.Cookie = New System.Net.Cookie
        cookieZoneId.Domain = "www.dlapiper.com"
        cookieZoneId.Name = "ZoneId"
        cookieZoneId.Value = "8"
        cookieZoneId.Path = "/"

        Dim cookieEventingStatus As System.Net.Cookie = New System.Net.Cookie
        cookieEventingStatus.Domain = "www.dlapiper.com"
        cookieEventingStatus.Name = "EventingStatus"
        cookieEventingStatus.Value = "1"
        cookieEventingStatus.Path = "/"


        AttorneyList.CookieContainer = New System.Net.CookieContainer()

        AttorneyList.CookieContainer.Add(cookieLanguage)
        AttorneyList.CookieContainer.Add(cookieLocalization)
        AttorneyList.CookieContainer.Add(cookieCulture)
        AttorneyList.CookieContainer.Add(cookieMode)
        AttorneyList.CookieContainer.Add(cookieEventingStatus)
        AttorneyList.CookieContainer.Add(cookieNavId)
        AttorneyList.CookieContainer.Add(cookieSiteId)
        AttorneyList.CookieContainer.Add(cookieSERVER_PORT)
        AttorneyList.CookieContainer.Add(cookieHideNotice)
        AttorneyList.CookieContainer.Add(cookiePortletId)
        AttorneyList.CookieContainer.Add(cookieZoneId)

        'UTF8Encoding.ASCII.GetString(buffer)
        attys = AttorneyList.FindAttorneys("B", "", "", "", "", "", "", "", "", "", UTF8Encoding.ASCII.GetString(buffer), "global", False, "name", 0)
        Response.Write(attys)
    End Sub

    Function CharToBuffer(ByVal character As Char) As Byte
        Return Convert.ToByte(character)
    End Function
End Class


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum