FSharp.Data 程序集之 Http

用C#下的Raw Socket编程实现网络封包监视 用C#下的Raw Socket编程实现网络封包监视谈起socket编程,大家也许会想起QQ和IE,没错。还有许多网络工具如P2P、NetMeeting等在应用层实现的应用程序,也是用socket来实现的。Socket是一个网络编程接口,实现于网络应用层,Windows Socket包括了一套系统组件,充分利用了Microsoft Windows 消息驱动的特点。Socket规范1.1版是在19 阅读详情

FSharp.Data 程序集之 Http

(**
# F# Data: HTTP Utilities

.NET 库提供了强大的 API,产生和发送 HTTP WEB 请求,有两个类型,一个简单,`WebClient`(参见 [MSDN][1]) ,另一个稍微复杂,`HttpWebRequest`,(参见 [MSDN][2]) 。然而,这两个类型的使用相当困难,如果只打算运行简单的 HTTP 请求,指定参数,比如,方法、HTTP POST 数据或者额外的头。

F# Data 库提供简单的 Http 类型,有两个重载的方法:`Request` and `AsyncRequest`,用于创建同步、异步执行的请求。

 [1]: http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx
 [2]: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

要使用这个类,首先要引用库,F# interactive 中使用 `#r`,在项目中添加引用,然后加载 `FSharp.Net` namespace:
*)
Credentials <- NetworkCredential ("hadstj@hotmail.com","kokyWfYXaG5H63g3CvS3UW5mgnydQFvwXyc1h+p7U+I=")
#r "../../bin/FSharp.Data.dll"
open FSharp.Net

(**
##   发送简单的请求

在发送简单的 HTTP (GET) 请求,下载指定的页面,可以使用 `Http.Request` and `Http.AsyncRequest`,只需要一个参数:
*)

// 下载页面
Http.Request("http://tomasp.net")

// 异步下载页面
async { let! html = Http.AsyncRequest("http://tomasp.net")
        printfn "%d" html.Length }
|> Async.Start

(**
在下面的文档中,我们只讨论 `Request` 方法,因为 `AsyncRequest` 的用法完全相同:

## 查询参数与头

指定查询参数的方法,可以是把参数包含在 URL 中 (例如 `http://...?test=foo&more=bar`),也可以使用可靠的参数 `query` 进行传递。下面的例子,还显式指定了 GET 方法,如果不指定,会自动设置:
*)

Http.Request("http://httpbin.org/get", query=["test", "foo"], meth="GET")

(**
指定额外的头也很相似,使用可选的参数 `headers`。这个集合不仅可以包含标准的头,比如 Accept 头(当使用 `HttpWebRequest` 时,必须显式指定),还可以包含自定义的头。

下面的例子使用 [电影数据库] (http://www.themoviedb.org) API,搜索 "batman"。要运行这个例子,需要注册,并提供 API 的 key:
这里提供了一个 key,是 F# 大拿演示用的。请仅用于测试程序。
*)
// API key for http://www.themoviedb.org
let apiKey = "6ce0ef5b176501f8c07c634dfa933cff"

// HTTP 请求
Http.Request
  ( "http://api.themoviedb.org/3/search/movie",
    query   = [ "api_key", apiKey; "query", "batman" ],
    headers = [ "accept", "application/json" ])

(**
## 发送请求数据

如果打算发送有 HTTP POST 数据的 POST 请求,可以使用 `body` 参数,以字符串形式指定额外的数据,也可以在 `bodyValues` 参数中以键-值对的形式指定数据。如果指定 body 数据,不需要指定 `meth` 参数,自动设置成 `GET` 方法。

下面的例子使用 [httpbin.org](http://httpbin.org) 服务,它会返回请求的详细信息:
*)

Http.Request("http://httpbin.org/post", bodyValues=["test", "foo"])

(**
通常,Content-Type 头被设置为 `application/x-www-form-urlencoded`,但是,也可以改变,只要使用可选的 `headers`参数,在头列表中添加 `content-type`:
*)

Http.Request
  ( "http://httpbin.org/post",
    headers = ["content-type", "application/json"],
    body = """ {"test": 42} """)

(**
## 在请求之间保持 cookies

如果想在请求之间保持 cookies,可以指定 `cookieContainer` 参数。

下面的例子是检索 MSDN 文档中有关 `HttpRequest` 类,只包含 C# 的代码片段,而没有 F# 的:
*)

// 为给定类的文档构建 URL
let msdnUrl className =
  let root = "http://msdn.microsoft.com"
  sprintf "%s/en-gb/library/%s.aspx" root className

// 得到页面,查找 F# 代码
let docInCSharp = Http.Request(msdnUrl "system.web.httprequest")
docInCSharp.Contains "<a>F#</a>"

(**
如果我们现在到另外的 MSDN 页面,在 F# 代码示例上单击,然后,返回 `HttpRequest` 类文档,它会保持相同的 `cookieContainer`,会得到 F# 的代码片段:
*)

open System.Net
let cc = CookieContainer()

// 发送请求,并切换语言
Http.Request
  ( msdnUrl "system.datetime",
    query = ["cs-save-lang", "1"; "cs-lang","fsharp"],
    cookieContainer = cc) |> ignore

// 再次请求文档,并查找 F#
let docInFSharp =
  Http.Request
    ( msdnUrl "system.web.httprequest",
      cookieContainer = cc )
docInFSharp.Contains "<a>F#</a>"

(**
如果想看到更多有关这个的信息,包括响应的头,返回的 cookie,以及响应的 URL(如果有重定向的话,它会不同于传递进去的 URL),可以使用 `RequestDetailed` 方法:
*)

let response = Http.RequestDetailed(msdnUrl "system.web.httprequest")

// 检查响应的信息
response.Cookies
response.ResponseUrl

(**
## 请求二进制数据

`Request` 方法总是把响应返回成字符串,但是,如果使用 `RequestDetailed` 方法,可以根据响应的 `content-type` 头属性,返回 `HttpResponseBody.Text` 或 `HttpResponseBody.Binary`:
*)

let logoUrl = "https://raw.github.com/fsharp/FSharp.Data/master/misc/logo.png"
match Http.RequestDetailed(logoUrl).Body with
| HttpResponseBody.Text text ->
    printfn "Got text content: %s" text
| HttpResponseBody.Binary bytes ->
    printfn "Got %d bytes of binary content" bytes.Length

(**
## 发送客户端证书

如果想在请求中加上客户端证书,可以使用可选的参数 `certificate`,然后传递 `X509ClientCertificate` 值。这需要引入 `System.Security.Cryptography` 中的 `X509Certificates` 命名空间。

假设证书保存在  `myCertificate.pfx`,程序可以这样写:
*)

open System.Security.Cryptography.X509Certificates

// 从文件加载证书
let clientCert =
  new X509Certificate2(".\myCertificate.pfx", "password")

// 发送带证书的请求
Http.Request
  ( "http://yourprotectedresouce.com/data",
    certificate = clientCert)

C# framework post请求连接超时问题 今天在framework 452 上做功能,写post请求。一直响应连接超时。 由于响应时间设置的很短,判断是服务端没有接受到请求 后找到问题,系request的.ServicePoint.Expect100Continue 设置为true导致,修改为 false后能正常访问。 特意在此记下。 贴下代码: public string Post(string url, string... 阅读详情

相关推荐

c#实现http post方法实例

c#实现的http post方法实例,测试通过。

C# 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套

原文地址:https://cnodejs.org/topic/539ff8a5c3ee0b5820938d60 raw方式使用的是纯字符串的数据上传方式,所以在POST之前,可能需要手工的把一些JSON格式的数据转换成字符串的(加两单引号) Form-data的方式就是key-value的提交,数据其实是分割的 Form-data 是键值对, 你只能通过postman提供的表单填...

weixin_33795093的博客 3105

c#下post multipart/form-data和JSON

c#下post 发送 multipart/form-data和JSON数据

C#获取企业微信打卡数据

在涉及到获取第三方数据的时候都会涉及到调用接口,小编为此也是搜索了很长一段时间呢!https://www.cnblogs.com/BOSET/p/7089284.html这是小编参考的一份很完善的C#调用接口的博客,下面主要贴上小编主要使用的参考代码 using System; using System.Collections.Generic; using System.IO; using Sys...

weixin_43942765的博客 3619

C# httpPost

C# httpPost简单的demo,就是一个测试demo。http post的使用

C# 读取RAW文件程序

简单的C# 读取RAW功能,已调试好,不带其他图像处理或转换的功能。

C# HTTP RAW 传输

最近做项目开发需要上传用户行为数据,采用C#来上传数据 使用了HttpWebRequest 来实现 传输方式采用的是POST的方式 内容格式采用application/json 具体实现的代码如下: public static string HttpPostRaw(string url, string data)         {             string value = ...

冯胜的专栏 9938

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3345

F# 优雅使用Dapper进行数据库操作

本文来自 iteye@fairjm 转截请注明出处   之前写过一篇用SQLProvider进行数据库连接的,但实际使用的时候发现兼容性不是很好,在用mysql的时候很多表都找不到,要反复rebuild. 直接使用ADO.NET的话就显得麻烦.来看一下ADO.NET一个查询到例子 let cStr =@"Server=地址;Port=端口;Database=数据库名称;Uid=用户名;...

Fair_Jm的专栏 649

STM32H750实战:用TIM+DMA驱动ADC/DAC实现音频回环(附CubeMX配置避坑指南)

本文详细介绍了在STM32H750上构建高保真、低延迟音频链路的实战方法。通过配置TIM定时器作为硬件节拍器,精准触发ADC采集与DAC播放,并利用DMA实现数据的自动搬运,全程无需CPU干预。文章重点剖析了CubeMX配置中的关键步骤与常见“坑点”,如ADC的Conversion Data Management模式选择、DMA的FIFO与Burst模式配置,以及STM32H7系列必须开启ADC全局中断等,并提供了完整的代码实现与调试验证指南。

1057

YOLOv8使用设备摄像头实时监测

YOLOv8使用设备摄像头实时监测

Joining667的博客 4188

Ubuntu 18.04 搭建稳定 F# 开发环境:Mono 兼容方案实战

F# 是微软官方支持的强类型函数式语言,广泛应用于金融系统、工业控制与 Azure 数据平台。其核心运行依赖 .NET 兼容运行时,在旧版 Linux 系统如 Ubuntu 18.04 上,因 glibc、libicu 和 OpenSSL 版本锁定,直接部署 .NET Core 易引发 ABI 冲突与 apt 崩溃。此时 Mono 不是过时替代品,而是经十年生产验证的稳定解法——它静态链接运行时、规避系统库冲突,并原生支持 FSharp.Core 4.7.2 与 .NET Standard 2.0。本文聚焦

weixin_34082854的博客 299

USRP N210与MATLAB连接实战:从驱动安装到信号接收

本文详细介绍了USRP N210与MATLAB连接的完整流程,涵盖驱动安装、网络配置、支持包安装及信号接收实战。重点解决了安装过程中的常见错误和硬件连接问题,并通过MATLAB代码示例展示了如何配置接收器、处理信号数据,帮助用户快速实现从设备对接到信号分析的全过程。

blue的专栏 821

Ubuntu 18.04 搭建 F# 开发环境:基于 .NET Core 3.1 的工程化实践

F# 是一门融合函数式编程与工业级工程能力的现代语言,其核心运行依赖于 .NET 运行时生态。理解 F# 编译器、FSharp.Core 库与底层运行时(如 .NET Core 或 Mono)的协同机制,是构建可靠开发环境的前提。在 Ubuntu 18.04 这类长期支持但生态陈旧的发行版中,系统包管理器提供的 F# 工具链往往绑定过时的 Mono 运行时,导致 F# 5.0+ 新特性(如 let! 异步语法、nuget 交互式引用)无法使用,甚至引发 System.Object 缺失、FSharp.Cor

weixin_33901641的博客 402

GB28181 —— 1、Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台

5462

030、微透镜阵列与光场成像:从光场相机到深度感知的演进

文章摘要: 光场成像通过微透镜阵列(MLA)同时记录光线的位置与方向,实现单次曝光获取三维信息。其核心架构包括主镜头+MLA+传感器或相机阵列,各有分辨率与体积的权衡。光场支持先拍照后对焦和深度估计,但受限于微透镜基线短,精度较低。深度算法需结合多视角立体匹配与极平面图像分析,并处理噪声和温度漂移等实际问题。光场适用于短距离动态场景(如手势识别),而远距离高精度需求仍需激光雷达。建议初学者通过二手光场相机和开源工具入门,理解光场“角度域”与“空间域”的协同机制。

sundong_81的博客 50

C# post参数传入方式

application/x-www-form-urlencoded 方式 所有的数据 使用 “参数1=参数&参数2=参数&参数3=参数” 传入方式: /// /// 指定Post地址使用Get 方式获取全部字符串 /// /// 请求后台地址 /// Post提交数据内容(utf-8编码的) /// public static string Post(string url, string content) { string result = “”; HttpWebRequest re

weixin_40029679的博客 3276

Python 爬虫实战:抓取新闻网站上的新闻标题和内容

随着信息化的进展,新闻网站已经成为人们获取新闻和时事资讯的主要途径。许多新闻网站提供了丰富的内容,涵盖了社会、政治、科技、娱乐等多个领域。通过抓取新闻网站的内容,我们可以分析新闻的趋势,获取某一领域的最新动态,甚至为数据分析和机器学习提供数据支持。本文将详细介绍如何使用 Python 编写爬虫,抓取新闻网站上的新闻标题和内容。requests:发送 HTTP 请求,获取页面内容。:解析 HTML 页面并提取数据。Selenium:抓取动态加载的网页内容。新闻API。

2201_76125261的博客 3408

C# Http 请求接口 Get / Post

get 和 post 请求,最早被用来做浏览器与服务器之间交互HTML和表单的通讯协议,后来又被广泛的扩充到接口格式的定义上,到目前为止,get / post 请求依然应用在各大网站中,比如在用户登录时,调用 get / post 请求将用户名、密码传到服务器,由服务器进行判断,是否允许用户登录,再将结果返回给浏览器,这样就实现了登录的功能。在后期的 pc 软件开发中,get / post 请求偶尔也会用到,做为一个程序员,http 协议也是我们必须要学的知识点。

熊思雨的博客 2万+

第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码)

大家好,我是cuiwin!本节内容,我们从零开始开发基于Python(Flask)的后端项目,对接Vue Vben Admin(vben5)。登录mysql数据库执行: 创建数据库。

cuiwin的专栏 2267

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[转]C#中POST数据和接收的几种方式

POST方式提交数据,一种众所周知的方式: html页面中使用form表单提交,接收方式,使用Request.Form[""]或Request.QueryString[""]来获取。 这里介绍另外一种POST方式和接收方式,就是将整个数据作为加入到数据流中提交和接收 接收方式: Stream s = System.Web.HttpContext.Current.Requ...

weixin_30323631的博客 686

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++ http协议POST body raw 字段向服务器发送请求

C++ http协议POST body raw 字段向服务器发送请求

沉默老曹的博客 710

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# 发送POST请求

【代码】C# 发送POST请求。

zhiqingcn的专栏 2979

c#post 请求完成代码

post请求,制定地址,请求头中添加令牌,制定接收方式是jason

m0_67560682的博客 278
上一篇: 清理 Windows installer 目录
下一篇: 改变 WID 的位置
心想才事成
博客等级 码龄20年 104粉丝 420原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值