我正在尝试使用HTML Agility Pack来查找http://www.dlapiper.com/global/people/search.aspx?gLastName=A的律师名单。该站点使用Ajax来填充名称,所以我没有运气这个服务器端。我注意到该网站正在http://www.dlapiper.com/FCWSite/DlaPiperWS/Attorneys.asmx?op=FindAttorneys调用一个Web服务,所以我试图从我的应用程序中调用相同的Web服务。
我正在使用以下代码,但它返回内部服务器错误500,我怀疑是因为我需要一个会话cookie? (因为如果我禁用cookie,该网站不起作用)
有人可以帮忙吗?
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;
}
答案 0 :(得分:1)
正如我在评论中所述......我在我的项目中添加了Attorney.asmx网址作为网络参考。
这样做时,我让web引用的引用名称为'com.dlapiper.www'。
以下内容位于vb.net中,代表标准默认页面。 com.dlapiper.www.Attorneys类代表连接的上下文。
请注意,Attorneys.FindAttorney返回一个字符串值..
另外,你可以从我的缓冲区和array.convertAll中看到代码尝试,我正在尝试不同的编码..如果你试图调用FindAttorney而不添加cookie容器和以下的cookie ...你会错误地得到一个SOAP异常,说明localizationGUID没有正确输入。
我在代码中留下了一些不相关的部分,因为我是逆变编程的粉丝。
事实是,该参数不能为空,但实际上并未被函数使用.. cookie名称:值为。
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