简单的 curl HTTP的POST&GET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试

1. 需求

我们公司有一个演示项目,需要到客户那边进行项目部署,项目部署完成后我们需要进行项目后端接口的测试功能,但是由于客户那边么有条件安装类似于postman这种的测试工具,所以我们只能使用 LINUX curl 命令来模拟登录接口的登录测试。

2. 模拟测试过程

我们测试的登录一共有两个接口,其中一个是我们uaa-server登录服务,使用登录服务ip 端口直接进行登录,另一个为我们使用网关接口,进行登录转发到登录系统,进行登录操作。接口支持form-data以及json格式参数登录,请求方式为POST形式。

注意:我们测试环境密码校验部分已经注释,可以随意填写,所以测试密码为随机填写

具体参数如下:

  • header:登录服务为信贷以及风险两个项目提供登录,使用一个 systemFlag为系统判定参数,0 信贷 1风险
  • username: 用户名
  • password: 用户密码

uaa-server以及credit-gateway两个服务具体的请求的地址分别如下:

  • uaa-server:http://10.100.3.13:11204/login
  • credit-gateway:http://10.100.3.12:11200/dics/demo/login/login

2.1 postman 测试接口

我们使用postman分别进行接口测试,由于两种登录的参数相同,那么我们就使用一个接口进行postman进行测试了,我们使用网关接口进行测试:

  • header 内容为 0 信贷查询
    在这里插入图片描述
  • 请求参数为 name以及password,请求类型为 form-data
    在这里插入图片描述
  • 请求返回结果如下:
    在这里插入图片描述
  • 我们使用 json 格式再次进行请求,发现可以正常请求
    在这里插入图片描述

2.2 curl 测试接口

我们使用curl 进行测试接口,接口使用网关接口,首先我们使用 json 格式进行请求接口

curl -v -X POST http://localhost:11200/dics/sit2/login/login -H "Content-Type:application/json" "systemFlag: 0" -d "{\"password\":\"k9smtz4HKgOD47ef5SNbIQ==\",\"username\":\"331326\"}"
http://10.100.3.12:11200/dics/demo/login/login

具体的参数解释如下:

  • -v:启用详细模式,显示更多调试信息。
  • -X POST:指定请求方法为 POST。
  • -H “Content-Type:application/json” 设置Content-Type为json格式
  • -H “systemFlag: 0”:添加一个名为 systemFlag 的请求头,并将其值设置为 0。
  • -d “{\“password\”:\“k9smtz4HKgOD47ef5SNbIQ==\”,\“username”:\“331326\”}” json格式的请求体

执行结果如下,成功相应token信息:
在这里插入图片描述
我们再使用form-data形式请求接口,具体的请求语句如下:

curl -v -H "Content-Type: multipart/form-data" -X POST -F "username=331326" -F "password=a11111" http://10.100.3.12:11200/dics/demo/login/login --insecure

具体的参数解释跟上面解释相同,稍微不同的解释如下:

  • -H “Content-Type: multipart/form-data” 使用 form-data形式访问
  • -F ‘username=331326’ -F ‘password=a11111’ 具体的请求标点 form 参数
  • –insecure 允许 curl 忽略 SSL 证书验证

请求结果如下所示,发现卡住了,卡在了 HTTP/1.1 100 Continue 处不动了 :
在这里插入图片描述
原因:当你执行 curl 命令时,如果遇到 HTTP/1.1 100 Continue 响应并卡住,这通常是由于服务器在等待客户端发送完整的请求体。100 Continue 是 HTTP/1.1 中的一种状态码,表示服务器已经收到了请求头,并且客户端应该继续发送请求体。

解决方法:尝试禁用 100 Continue 状态码的处理,使用 -H “Expect:” 参数来禁用 Expect: 100-continue 头,修改后的脚本为:

curl -v -H "Content-Type: multipart/form-data" -H "Expect:" -X POST -F "username=331326" -F "password=wcwcwcw" http://10.100.3.12:11200/dics/demo/login/login --insecure

在这里插入图片描述
发现脚本可以正常执行了,并且返回了需要的token信息。

3. curl ip port连通性测试

我们测试当前机器是否与 10.100.3.12:11200 网络相同,可以使用curl 命令进行测试,具体脚本如下:

# -m 为设置超时时间10s
curl -v -m 10 --insecure http://10.100.3.12:11200/

我们在服务器上执行的结果如下:

  • 如果连接成功
    在这里插入图片描述
  • 如果连接失败
    在这里插入图片描述

4. 新增sso接口同步测试案例

sso需要用curl进行测试,简单记录一下请求案例

# GET请求
curl -X GET "http://localhost:11200/dics/sit2/login/sso/callback?ticket=ticket123&method=method123&params=jack"
# POST请求
curl -X POST http://localhost:11204/sso/synchronousOtherEnvToken -H "Content-Type: application/json" -d "{\"otherEnvToken\": \"test_token_123\", \"tokenDetailMapInfo\": {\"username\": \"admin\", \"role\": \"user\", \"status\": \"active\"}}"

<think>首先,用户的问题是关于如何使用curl测试特定端口的连接。问题提到了“参考站内引用”,其中有一些引用:-引用[1]提到用curltelnet检测端口是否开放,但实际操作是使用curl检查协议连接。-引用[2]是关于curl的一般命令解释,包括FTP下载等。-引用[3]提到curl用于RESTAPI测试,可以使用Get/Post等方法。用户现在的具体需求是:我想测试Curl连接特定端口的使用方法或命令。问题强调:linuxcurl测试端口命令。用户在上一次的问题中提到了“测试Curl连接特定端口的使用方法”,所以我需要回顾之前的对话。但从这个输入看,用户是第一次问这个问题,因为系统指令是重新开始的。在用户消息中,引用了之前的引用,包括“[^1]”、“[^2]”、“[^3]”,但这些是参考,不是真实的用户历史。系统指令中说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”但在这个上下文里,这似乎是新的查询,因为没有显示之前的问题。用户消息以“用户可见层”结束,但这只是系统指令的部分。完整消息的最后部分是用户的问题:"我想测试Curl连接特定端口的使用方法或命令请问如何使用curl测试特定端口连接/linuxcurl测试端口命令"。所以,核心问题是:如何使用curl测试特定端口的连接?具体命令是什么?现在,回忆一下curl的基本用法:curl是一个命令行工具用于传输数据,支持多种协议(HTTP,HTTPS,FTP等)。要测试连接到一个特定端口,我需要指定协议、主机和端口号。标准的curl命令格式是:```curl[protocol://]host:port```例如,测试端口80(通常为HTTP):```curlhttp://example.com:80```或者测试端口443(通常为HTTPS):```curlhttps://example.com:443```用户提到了“telnet”,但引用[1]中是误用了?引用[1]说“curltelnet检测端口是否开放”,但实际命令使用“--proto”选项。参考[1]的命令:`curl–proto“=https”–headhttps://github.com`。这不是直接测试端口的方法。用户的实际需求是测试端口是否开放,而不是具体协议内容。curl可以用来测试端口连接,但可能需要指定协议。如何用curl测试一个端口的连接?常见方法:1.**使用明确协议**:指定协议和端口,如`curlhttp://host:port`。如果端口运行HTTP服务,它会响应;否则可能超时或错误。2.**使用--connect-to选项**:在较新版本的curl中,可以使用`--connect-to`选项来指定主机和端口。3.**直接测试连接**:curl本身并不是一个端口扫描工具,如telnet或nc(netcat),但可以通过指定端口测试连接。例如:```curlhttp://example.com:8080```这会在8080端口发送HTTP请求。如果只想测试连接性而不获取内容,可以使用`-I`选项(或`--head`)发送HEAD请求。引用[3]提到curl用于接口测试,包括Get/Post等,但和端口测试相关。系统指令要求:-使用`$...$`用于行内数学表达式(这里没有数学表达式,所以无需使用)。-独立公式用`$$...$$`(也没有用到)。-LaTeX语法正确(避免使用LaTeX,因为内容是命令,使用代码块)。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识,如[^1]。但在这里,引用是提供的,所以我可以在回答中使用它们。用户提到了引用的内容:-[^1]:关于使用curl检查协议连接。-[^2]:关于curl的一般命令。-[^3]:关于curl用于API测试。我需要参考这些引用,如果相关的话。特别是我需要回答端口测试的命令。适当的curl命令来测试端口连接:-**基本格式**:`curl[协议]://[主机]:[端口]`例如:`curlhttp://example.com:8080`-如果使用HTTPS:`curlhttps://example.com:443`-为了只测试连接而不下载内容,使用`-I`或`--head`选项。这发送HEAD请求,返回响应头。引用[1]展示了`curl--proto"=https"--headhttps://github.com`,这是测试特定协议的,不是直接端口测试。要测试任何端口,比如TCP端口80或其他,curl需要指定协议。它不支持裸套接字连接;必须有一个协议。因此,即使端口80不是HTTP服务,也可以尝试`curlhttp://host:80`,然后根据响应判断。例如:```#测试端口80是否可访问curlhttp://example.com:80#如果成功,会显示响应内容;如果端口关闭,会超时或显示连接失败。```为了简洁,使用`-v`(verbose)选项查看细节:```curl-vhttp://example.com:8080```这将显示连接建立、数据传输等,有助于诊断。系统指令要求生成相关问题。在最后添加相关问题列表。回答结构:1.**介绍**:简要解释如何使用curl测试特定端口的连接。2.**命令语法**:给出具体的命令格式和示例。3.**解释选项**:如使用`-I`测试端口响应。4.**参考引用**:如果有,自然地添加引用标识。5.**相关问题**:列出生成的相关问题。因为使用中文回答。最终回答:-使用中文。-如果有数学相关内容,使用LaTeX格式(但这里没有)。-生成相关问题。</think> ### 如何使用curl测试特定端口的连接 在Linux系统中,`curl`是一个强大的命令行工具,常用于数据传输和支持多种协议(如HTTPHTTPS、FTP)。它可以通过指定协议、主机和端口测试端口的连接状态。这里,我将一步步引导您使用`curl`进行端口测试,并基于您的引用内容(如引用[1]和引用[3])解释关键部分。 #### 1. **基本命令格式** curl测试端口的通用语法是: ``` curl [协议]://[主机名或IP]:[端口] ``` - **[协议]**:根据端口对应的服务指定协议(如HTTPHTTPS等)。curl不支持裸套接字连接,必须通过协议来发送请求[^3]。 - **[主机名或IP]**:目标服务器的域名或IP地址。 - **[端口]**:要测试的目标端口号。 示例: - 测试HTTP服务(端口80)是否开放: ```bash curl http://example.com:80 ``` 如果端口开放且服务正常,您将看到响应的HTML内容或状态码(如`HTTP/2 200`)。 - 测试HTTPS服务(端口443)是否开放: ```bash curl https://example.com:443 ``` 如果连接成功,您可能获得类似于`HTTP/2 200 server: GitHub.com...`的输出(如引用[1]所示)。 如果端口关闭或服务未启动,curl会报错,如`Connection refused`或超时。 #### 2. **添加选项优化测试** 为了更高效地测试端口连接,而不获取完整内容,可以使用curl的高级选项: - **使用`-I`或`--head`选项仅获取响应头**:发送HEAD请求(不下载响应体),快速检查端口状态。 ```bash curl -I http://example.com:8080 ``` 例如,输出可能包含响应状态(如`HTTP/1.1 200 OK`),这表示端口开放和服务可用。 - **使用`-v`选项查看详细调试信息**:显示连接建立过程,包括是否成功连接到端口。 ```bash curl -v http://example.com:3306 # 测试MySQL端口(3306) ``` - 如果端口开放,输出会显示`Connected to example.com (192.0.2.1) port 3306`。 - 如果失败,会显示`Connection timed out`或`Failed to connect`等错误。 - **使用`--connect-timeout`设置超时时间**:避免长时间等待。 ```bash curl --connect-timeout 5 http://example.com:22 # 5秒超时测试SSH端口(22) ``` #### 3. **特殊情况说明** - **测试HTTP/HTTPS端口**:对于其他协议(如自定义TCP端口),curl需要指定协议。但如果您不确定服务类型,可以假设为HTTP并使用`-I`测试连通性。 ```bash curl -I telnet://example.com:8080 # 类似引用[1],但需注意--proto更特定于HTTPS ``` 引用[1]展示了`curl --proto "=https" --head https://github.com`来强制使用HTTPS协议,但直接端口测试需结合host:port[^1]。 - **其他协议测试(如FTP)**:引用[2]提到curl支持FTP协议下载文件(如`curl -O ftp://username:password@host:port/file`),类似方式可测试端口: ```bash curl ftp://example.com:21 # 测试FTP端口(21) ``` 连接成功会显示FTP服务信息或登录提示。 #### 4. **常见问题与解决方法** - **如果端口关闭?**:curl返回错误如`curl: (7) Failed to connect to host port`,这表明端口不可达。建议确认服务状态或检查防火墙设置。 - **安全提示**:测试敏感端口时,确保您有权限访问该主机。 - **性能优化**:在脚本自动化中,使用`-s`选项静默输出(如引用[2]提到的`curl -s -O...`),然后结合退出码判断(0表示成功,非0表示失败)[^2]。 总结,curl是一个多功能的工具,不仅用于API测试(如引用[3]所述),还能简单高效地验证端口连通性。实践时,建议先测试常见端口(如80、443),再扩展至其他端口[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值