- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 AnthonyWJones 的建议,我根据他的建议更改了我的代码。
在我继续询问的过程中,我注意到随着时间的推移,加拿大邮政的内容类型更有可能是 "application/xhtml+xml, text/xml, text/html; charset=utf- 8".
我的问题是:
这是我的代码,这样可能更容易理解我的进度。
internal class PostalServicesFactory {
/// <summary>
/// Initializes an instance of GI.BusinessSolutions.Services.PostalServices.Types.PostalServicesFactory class.
/// </summary>
internal PostalServicesFactory() {
}
/// <summary>
/// Finds a Canadian postal code for the provided Canadian address.
/// </summary>
/// <param name="address">The instance of GI.BusinessSolutions.Services.PostalServices.ICanadianCityAddress for which to find the postal code.</param>
/// <returns>The postal code found, otherwise null.</returns>
internal string FindPostalCode(ICanadianCityAddress address) {
if (address == null)
throw new InvalidOperationException("No valid address specified.");
using (ServicesWebClient swc = new ServicesWebClient()) {
var values = new System.Collections.Specialized.NameValueCollection();
values.Add("streetNumber", address.StreetNumber.ToString());
values.Add("numberSuffix", address.NumberSuffix);
values.Add("suite", address.Suite);
values.Add("streetName", address.StreetName);
values.Add("streetDirection", address.StreetDirection);
values.Add("city", address.City);
values.Add("province", address.Province);
byte[] resultData = swc.UploadValues(@"http://www.canadapost.ca/cpotools/apps/fpc/personal/findByCity", "POST", values);
return Encoding.UTF8.GetString(resultData);
}
}
private class ServicesWebClient : WebClient {
public ServicesWebClient()
: base() {
}
protected override WebRequest GetWebRequest(Uri address) {
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = new CookieContainer();
return request;
}
}
}
此代码实际上返回表单的 HTML 源代码,必须填写所需的信息才能处理邮政编码搜索。我想要的是获取 HTML 源代码或与找到的邮政编码相关的任何内容。
EDIT: Here's the WebException I get now: "Unable to send a content body with this type of verb." (This is a translation from the French exception "Impossible d'envoyer un corps de contenu avec ce type de verbe.")
这是我的代码:
internal string FindPostalCode(string url, ICanadianAddress address) {
string htmlResult = null;
using (var swc = new ServiceWebClient()) {
var values = new System.Collections.Specialized.NameValueCollection();
values.Add("streetNumber", address.StreetNumber.ToString());
values.Add("numberSuffix", address.NumberSuffix);
values.Add("suite", address.Suite);
values.Add("streetName", address.StreetName);
values.Add("streetDirection", address.StreetDirection);
values.Add("city", address.City);
values.Add("province", address.Province);
swc.UploadValues(url, @"POST", values);
string redirectUrl = swc.ResponseHeaders.GetValues(@"Location")[0];
=> swc.UploadValues(redirectUrl, @"GET", values);
}
return htmlResult;
}
导致异常的行用“=>”指向。似乎我不能使用 GET 作为方法,但这是告诉我要做的...
知道我在这里缺少什么吗?我尝试按照贾斯汀(查看答案)推荐我去做。
在此先感谢您的帮助! :-)
最佳答案
作为屏幕抓取世界的介绍,您选择了一个非常困难的案例!加拿大邮政的查找页面是这样工作的:
更糟糕的是,第 3 步中的页面需要知道第 1 步中设置的 cookie。所以你需要使用相同的 CookieContainer
对于所有三个请求(尽管将相同的 CookieContainer
发送到 #2 和 #3 可能就足够了)。
此外,您可能还需要在这些请求中发送额外的 HTTP header ,例如接受。我怀疑您遇到问题的地方是 HttpWebRequest 默认情况下会为您透明地处理重定向——但是当它透明地重定向时,它可能不会添加模拟浏览器所需的正确 HTTP header 。
解决方案是将HttpWebRequest
的AllowAutoRedirect
属性设置为false,并自行处理重定向。换句话说,一旦第一个请求返回重定向,您将需要在 HttpWebResponse
的 Location:
header 中提取 URL。然后您需要为该 URL 创建一个新的 HttpWebRequest
(这次是常规 GET 请求,而不是 POST)。记得发送相同的 cookie! (CookieContainer
类使这变得非常简单)
为了设置 session cookie,您可能还需要提出一个额外的请求(我上面列表中的第一个)。如果我是你,我会假设这是必需的,只是为了将其作为一个问题来消除,并稍后尝试删除该步骤,看看你的解决方案是否仍然有效。
您需要下载并使用 Fiddler (www.fiddlertool.com) 来帮助您完成这一切。 Fiddler 允许您观察通过线路传输的 HTTP 请求,并允许您(通过请求构建器功能)允许您创建 HTTP 请求,以便您可以查看实际需要哪些 header 。
关于c# - WebRequest:如何使用针对此 ContentType ="application/xhtml+xml, text/xml, text/html; charset=utf-8"的 WebRequest 查找邮政编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1455567/
我正在尝试将一些模型从一个 Django 应用程序迁移到另一个应用程序,并基于这个问题 How do I migrate a model out of one django app and into
我正在开发我的 android 项目,我正在创建一个请求函数来上传文件,该请求如下所示, httpClient.put(uri) { body = MultiPartFormDataConte
我正在尝试学习如何使用 ContentTypes 框架,我似乎无法找到我自己的应用程序。 文档 have clear instructions用于从 django.contrib.sites 导入模型
我最近尝试将一些装置加载到我的数据库中。当我运行服务器并加载各种页面时,虽然出现错误: Caught DoesNotExist while rendering: ContentType matchin
我用 async await 写了一些简单的代码,但是当我尝试运行它时,编译器抛出一个 System.InvalidOperationException。 完整的错误信息是: Unhandled Ex
微软有篇文章:http://support.microsoft.com/kb/193998/zh-cn,用doc读取和显示二进制数据,《怎样读取二进制文件》,没测试,懒得编译dll &nb
本文整理了Java中okreplay.YamlRecordedResponse.contentType()方法的一些代码示例,展示了YamlRecordedResponse.contentType()
写在前边 最近在写 OAuth2 对接的代码,由于授权服务器(竹云BambooCloud IAM)部署在甲方内网,所以想着自己 Mock 一下授权方的返回体,验证一下我的代码。我这才踩到了坑…… 故事
我的数据迁移文件中有这个: def set_target_user(apps, schema_editor): LogEntry = apps.get_model('auditlog', 'L
如何在 Django 单元测试中使用 GenericRelations? 我在互联网上阅读并尝试了无数建议,但无济于事。 这个很有前途Problems with contenttypes when l
我正在设计一个 api,它返回一个从第三方服务获取的图像 url。 我的问题是,对于所有媒体,我都使用我所谓的“媒体对象” { "ConetetType": "image/jpeg", "href
我有这些模型: class App(models.Model): name = models.CharField(max_length=100) class ProjectA(models.Mod
什么时候创建新的 ContentType?我如何自己触发它? 我进行了大量迁移、创建新模型等。完成所有操作后,将进行最终的数据迁移,将这些新对象的权限分配给已拥有相关权限的任何组。 (特此“相关权限”
在我们基于 ASP.NET Core 的 Web 应用程序中,我们需要以下内容:某些请求的文件类型应获得自定义 ContentType 的响应。例如。 .map应映射到 application/jso
我正在使用 Apache 和 mod_wsgi 将 Django 1.10 项目部署到 Ubuntu 服务器上。我收到以下无法解决的 500 错误: RuntimeError: Model class
我有两个表,Content 和 ContentType 每个内容都有一种内容类型 每种内容类型可能包含在许多内容中。 这是我的模型: @Entity @Table(name = "content")
我正在尝试使以下内容适合 Django ORM。有一个 Publish 模型来管理不同类型内容的发布(其他模型)。这样我就可以轻松地执行 Publish.objects.all() 并按日期排序。我做
我想从 ContentType 实例中获取对象的查询集,然后能够过滤它们。从文档中,可以到 get()一个对象使用: ct.get_object_for_this_type(**kwargs) 如何制
假设这是用户照片的模型: class Photo(models.Model): user = models.ForeignKey(User) title = models.CharFi
This web page有一个 ASP.NET MVC 代码示例,其中包括以下行: [Route("sitemap.xml")] public ActionResult SitemapXml() {
我是一名优秀的程序员,十分优秀!