当前位置: 首页 > news >正文

外贸企业网站红色风格怎么给自己的公司做网站

外贸企业网站红色风格,怎么给自己的公司做网站,wordpress 登陆插件下载,网站制作模板下载背景 有台服务器,网卡绑定有2个ip地址,分别为: A:192.168.111.201 B:192.168.111.202 在这台服务器请求目标地址 C:192.168.111.203 时必须使用B作为源地址才能访问目标地址C,在这台服务器默认…

背景

有台服务器,网卡绑定有2个ip地址,分别为:
A:192.168.111.201
B:192.168.111.202
在这台服务器请求目标地址
C:192.168.111.203
时必须使用B作为源地址才能访问目标地址C,在这台服务器默认又是使用A地址作为源地址。

1、curl解决办法

#指定源ip
curl -X POST -H "Content-Type:application/json"  --interface 192.168.111.202 http://192.168.111.203:8080/v1 -d '{"model":"x"}'

2、使用nginx解决办法 

        #转发接口location ^~ /v1 {root html;limit_rate 2048k;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 100m;client_body_buffer_size 128m;proxy_connect_timeout 120s;proxy_send_timeout 120s;proxy_read_timeout 120s;proxy_bind 192.168.111.202;  # 指定源IPproxy_pass http://192.168.111.203:8080;}

3、使用socket实现HTTP请求

由于原生HttpURLConnection不支持设置源ip地址,而socket支持设置源ip地址,所以使用socket实现http请求就可以了。

HttpURLConnection 示例 

 /*** 发送POST请求* @param url         请求地址* @param params      请求参数* @param contentType ContentType请求头类型* @param timeout     读超时,单位:秒* @author lhs* @date 2024/12/2 15:35*/public static String sendPost(String url, String params, String contentType, Integer timeout) {InputStream inputStream = null;OutputStream outputStream = null;HttpURLConnection connection = null;int responseCode = 0;try {connection = (HttpURLConnection) new URL(url).openConnection();connection.setRequestMethod("POST");connection.setDoInput(true);connection.setDoOutput(true);connection.setUseCaches(false);connection.setConnectTimeout(10000);// 连接超时(单位:毫秒)if (timeout == null || timeout == 0) {connection.setReadTimeout(15000);// 读超时(单位:毫秒)} else {connection.setReadTimeout(timeout * 1000);// 读超时(单位:毫秒)}if (contentType == null || contentType.length() == 0) {connection.setRequestProperty("Content-Type", APPLICATION_FORM_URLENCODED);} else {connection.setRequestProperty("Content-Type", contentType);}if (params != null && params.length() > 0) {outputStream = connection.getOutputStream();outputStream.write(params.getBytes(StandardCharsets.UTF_8));outputStream.flush();}int len;byte[] buf = new byte[4096];responseCode = connection.getResponseCode();inputStream = connection.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();while ((len = inputStream.read(buf)) != -1) {baos.write(buf, 0, len);baos.flush();}String result = baos.toString("UTF-8");baos.close();return result;} catch (Exception e) {String cause = e.getCause() == null ? "" : e.getCause().getMessage();return "Exception:" + responseCode + ":" + cause + e.getMessage();} finally {try {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}if (connection != null) {connection.disconnect();}} catch (IOException e) {log.error(e.getMessage(), e);}}}

HttpURLConnection源码分析过程

入口:connection.getInputStream()
 

情况一:

当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。
 

情况二: 

响应头有 Content-Length

 

 

 socket实现HTTP请求

socket实现http请求很简单,抓包看下报文就知道了,比较麻烦的是解析响应报文。
根据分析HttpURLConnection 源码可以看出响应报文解析需要区分响应头有Transfer-Encoding和响应头有 Content-Length 两种情况。

若需要指定源IP,打开“指定源IP方式”后面的注释代码,注释“不需要指定源IP方式”后面两行代码。

package com.study;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.net.www.MeteredStream;
import sun.net.www.http.ChunkedInputStream;import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;public class HttpClientUtil {private static final Logger log = LoggerFactory.getLogger(HttpClientUtil.class);/*ContentType请求头类型*/public final static String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded;charset=utf-8";public final static String APPLICATION_JSON = "application/json;charset=utf-8";public final static String APPLICATION_SOAP_XML = "application/soap+xml;charset=utf-8";public final static String MULTIPART_FORM_DATA = "multipart/form-data;charset=utf-8";public final static String APPLICATION_XML = "application/xml;charset=utf-8";public final static String TEXT_HTML = "text/html;charset=utf-8";public final static String TEXT_XML = "text/xml;charset=utf-8";public static void main(String[] args) throws Exception {String url = "http://www.7timer.info/bin/astro.php";String params = "lon=104.06&lat=30.65&ac=0&lang=en&unit=metric&output=json&tzshift=0";String result = sendPost(url, params, HttpClientUtil.APPLICATION_FORM_URLENCODED, 20);log.info("响应报文:" + result);}/*** 发送POST请求* @param url         请求地址* @param params      请求参数* @param contentType ContentType请求头类型* @param soTimeout   读超时,单位:秒* @author lhs* @date 2024/12/2 15:35*/public static String sendPost(String url, String params, String contentType, Integer soTimeout) throws Exception {URL u = new URL(url);String path = u.getFile();if (path != null && !path.isEmpty()) {if (path.charAt(0) == '?') {path = "/" + path;}} else {path = "/";}// 要连接的服务端IP地址和端口int port = u.getPort();String host = u.getHost();String authority = host;if (port != -1 && port != u.getDefaultPort()) {authority = host + ":" + port;}if (port == -1) {port = u.getDefaultPort();}// 设置连接超时时间int connectTimeout = 10 * 1000;// 不需要指定源IP方式Socket socket = new Socket();socket.connect(new InetSocketAddress(host, port), connectTimeout);// 指定源IP方式// SocketAddress localAddress = new InetSocketAddress("192.168.111.202", 0);// 0表示让系统自动选择一个端口// socket.bind(localAddress); // 绑定本地 IP 地址和端口// SocketAddress remoteAddress = new InetSocketAddress(host, port);// socket.connect(remoteAddress, connectTimeout); // 连接到远程服务器OutputStream outputStream = socket.getOutputStream();PrintStream serverOutput = new PrintStream(new BufferedOutputStream(outputStream), false, "UTF-8");socket.setTcpNoDelay(true);socket.setSoTimeout(soTimeout * 1000);// 请求参数body部分byte[] body = params.getBytes(StandardCharsets.UTF_8);// // 请求参数header部分String header = getHttpHeader(path, authority, contentType, body.length);log.info("请求报文:" + header + params);serverOutput.print(header);//请求参数header部分serverOutput.flush();serverOutput.write(body);//请求参数body部分serverOutput.flush();InputStream inputStream = new BufferedInputStream(socket.getInputStream());int len = 0;byte[] buf = new byte[8];// readlimit被设置为10,意味着从标记位置开始,你可以读取最多10个字节的数据,然后仍然可以通过调用reset()方法回到这个标记位置。inputStream.mark(10);while (len < 8) {int read = inputStream.read(buf, len, 8 - len);if (read < 0) {break;}len += read;}String scheme = new String(buf, StandardCharsets.UTF_8);inputStream.reset();if ("HTTP/1.1".equals(scheme)) {Map<String, String> headerMap = parseHeader(inputStream);try {//第一行响应内容String firstLineHeader = headerMap.get(null);int index;for (index = firstLineHeader.indexOf(32); firstLineHeader.charAt(index) == ' '; ++index) {}//响应码int responseCode = Integer.parseInt(firstLineHeader.substring(index, index + 3));log.info("响应码:" + responseCode);// 当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。String transferEncoding = headerMap.get("Transfer-Encoding");if ("chunked".equalsIgnoreCase(transferEncoding)) {inputStream = new ChunkedInputStream(inputStream, sun.net.www.http.HttpClient.New(u), null);}//响应body长度String contentLength = headerMap.get("Content-Length");if (contentLength != null) {long bodyLength = Long.parseLong(contentLength);inputStream = new MeteredStream(inputStream, null, bodyLength);}buf = new byte[4096];ByteArrayOutputStream baos = new ByteArrayOutputStream();//只有当客户端关闭它的输出流的时候,服务端才能取得结尾的-1while ((len = inputStream.read(buf)) != -1) {baos.write(buf, 0, len);}String result = baos.toString("UTF-8");return result;} catch (Exception e) {e.printStackTrace();}}return null;}/*** 该方法参考:sun.net.www.MessageHeader#mergeHeader(java.io.InputStream)源码* @author lhs* @date 2025/1/11 10:53*/private static Map<String, String> parseHeader(InputStream var1) throws IOException {Map<String, String> headerMap = new HashMap<>();if (var1 != null) {char[] var2 = new char[10];String var9;String var10;for (int var3 = var1.read(); var3 != 10 && var3 != 13 && var3 >= 0; headerMap.put(var10, var9)) {int var4 = 0;int var5 = -1;boolean var7 = var3 > 32;var2[var4++] = (char) var3;label104:while (true) {int var6;if ((var6 = var1.read()) < 0) {var3 = -1;break;}switch (var6) {case 9:var6 = 32;case 32:var7 = false;break;case 10:case 13:var3 = var1.read();if (var6 == 13 && var3 == 10) {var3 = var1.read();if (var3 == 13) {var3 = var1.read();}}if (var3 == 10 || var3 == 13 || var3 > 32) {break label104;}var6 = 32;break;case 58:if (var7 && var4 > 0) {var5 = var4;}var7 = false;}if (var4 >= var2.length) {char[] var8 = new char[var2.length * 2];System.arraycopy(var2, 0, var8, 0, var4);var2 = var8;}var2[var4++] = (char) var6;}while (var4 > 0 && var2[var4 - 1] <= ' ') {--var4;}if (var5 <= 0) {var10 = null;var5 = 0;} else {var10 = String.copyValueOf(var2, 0, var5);if (var5 < var4 && var2[var5] == ':') {++var5;}while (var5 < var4 && var2[var5] <= ' ') {++var5;}}if (var5 >= var4) {var9 = new String();} else {var9 = String.copyValueOf(var2, var5, var4 - var5);}}}return headerMap;}/*** 拼接http请求头报文* @author lhs* @date 2023/3/31 17:47*/private static String getHttpHeader(String path, String authority, String contentType, int length) throws Exception {StringBuilder header = new StringBuilder();header.append("POST " + path + " HTTP/1.1\r\n");// header.append("Content-Type: application/json;charset=UTF-8\r\n");header.append("Content-Type: " + contentType + "\r\n");header.append("Host: " + authority + "\r\n");header.append("Content-Length: " + length + "\r\n");header.append("\r\n");return header.toString();}}


文章转载自:
http://dinncoratifier.ydfr.cn
http://dinncoconterminous.ydfr.cn
http://dinncoundeify.ydfr.cn
http://dinncobeebee.ydfr.cn
http://dinncokinaesthesis.ydfr.cn
http://dinncoinitializers.ydfr.cn
http://dinncoturnover.ydfr.cn
http://dinncolighterage.ydfr.cn
http://dinncoaubergiste.ydfr.cn
http://dinncosupermarketeer.ydfr.cn
http://dinncobelladonna.ydfr.cn
http://dinncofastback.ydfr.cn
http://dinncoagrologist.ydfr.cn
http://dinncodoglegged.ydfr.cn
http://dinncononconformity.ydfr.cn
http://dinncodistributing.ydfr.cn
http://dinncobackscratching.ydfr.cn
http://dinncoouten.ydfr.cn
http://dinncokasolite.ydfr.cn
http://dinncogullet.ydfr.cn
http://dinncoacaridan.ydfr.cn
http://dinnconee.ydfr.cn
http://dinncoquilt.ydfr.cn
http://dinncozoology.ydfr.cn
http://dinncoblatter.ydfr.cn
http://dinncomonoclinal.ydfr.cn
http://dinncopbx.ydfr.cn
http://dinncoanomalure.ydfr.cn
http://dinncorefashion.ydfr.cn
http://dinncopentasyllable.ydfr.cn
http://dinncotechnologize.ydfr.cn
http://dinncocubical.ydfr.cn
http://dinncohyetograph.ydfr.cn
http://dinncocatawampus.ydfr.cn
http://dinncomoesogoth.ydfr.cn
http://dinncosetback.ydfr.cn
http://dinncoproabortion.ydfr.cn
http://dinncogeneva.ydfr.cn
http://dinnconedda.ydfr.cn
http://dinncorestless.ydfr.cn
http://dinncogangbuster.ydfr.cn
http://dinncoshortia.ydfr.cn
http://dinncotetrabromofluorescein.ydfr.cn
http://dinncoplasmapause.ydfr.cn
http://dinncogynogenesis.ydfr.cn
http://dinncodissemination.ydfr.cn
http://dinncoparliamentarism.ydfr.cn
http://dinncoproruption.ydfr.cn
http://dinncobyzantinist.ydfr.cn
http://dinncocimbalom.ydfr.cn
http://dinncocrenel.ydfr.cn
http://dinncoquarters.ydfr.cn
http://dinncoelectroplexy.ydfr.cn
http://dinncofateful.ydfr.cn
http://dinncoparaglider.ydfr.cn
http://dinncoverandah.ydfr.cn
http://dinncoweakling.ydfr.cn
http://dinncodatolite.ydfr.cn
http://dinncogranitic.ydfr.cn
http://dinncochalcopyrite.ydfr.cn
http://dinncointendancy.ydfr.cn
http://dinncobrainstorm.ydfr.cn
http://dinncodwell.ydfr.cn
http://dinncocambric.ydfr.cn
http://dinncomuckheap.ydfr.cn
http://dinncopagination.ydfr.cn
http://dinncomouldwarp.ydfr.cn
http://dinncojoint.ydfr.cn
http://dinncodogshore.ydfr.cn
http://dinncodionysos.ydfr.cn
http://dinncoturbinoid.ydfr.cn
http://dinncoideal.ydfr.cn
http://dinncobushwa.ydfr.cn
http://dinncoscree.ydfr.cn
http://dinnconba.ydfr.cn
http://dinncoinept.ydfr.cn
http://dinncoholdup.ydfr.cn
http://dinncocardiopulmonary.ydfr.cn
http://dinncohashing.ydfr.cn
http://dinncoexergonic.ydfr.cn
http://dinncopizazz.ydfr.cn
http://dinncosemimonastic.ydfr.cn
http://dinncopeadeutics.ydfr.cn
http://dinncohyperirritable.ydfr.cn
http://dinncolaomedon.ydfr.cn
http://dinncopassbook.ydfr.cn
http://dinncoimpulse.ydfr.cn
http://dinncodualist.ydfr.cn
http://dinncopalmitic.ydfr.cn
http://dinncogismo.ydfr.cn
http://dinncodissever.ydfr.cn
http://dinncoeuratom.ydfr.cn
http://dinncobheestie.ydfr.cn
http://dinncoorchardist.ydfr.cn
http://dinncoalf.ydfr.cn
http://dinncointerspinal.ydfr.cn
http://dinncoturnspit.ydfr.cn
http://dinncohoneysweet.ydfr.cn
http://dinncolimpopo.ydfr.cn
http://dinncoinsonify.ydfr.cn
http://www.dinnco.com/news/118700.html

相关文章:

  • 昆明网站建设公司口碑营销的特征
  • 买域名后 怎么做网站百度竞价排名查询网站
  • 网站建设最关键的两个素材app拉新佣金排行榜
  • 不会代码可不可以做网站广州网络运营课程培训班
  • 图片网站 建站网络营销推广方案策划
  • 呼和浩特市做网站的企业深圳seo优化服务
  • 网站如何做监控直播电商平台有哪些
  • 怎么用程序做网站百度网站首页入口
  • 怎么做原创动漫视频网站什么叫做seo
  • 网站服务器迁移步骤大连网站建设
  • 百度搜不到的网站ip域名解析查询
  • 电子商城网站开发seo专员工资待遇
  • 一般通过 什么意思网页优化包括
  • 网站敏感词汇首页关键词排名
  • wordpress适合网站seo关键词
  • 虚拟主机可以做视频视频网站吗企业推广软文范文
  • 网站建设服务器选择我要推广网
  • 建设公司网站的步骤线上广告平台
  • 浙江工程信息网成都seo推广员
  • 做网站的必要seo品牌优化
  • 注册资金500万的公司需要多少钱浙江seo公司
  • 网络服务器与个人计算机的区别关键词优化骗局
  • 济南最好的网站开发seo刷网站
  • 如何隐藏网站是基于thinkphp做的seo关键词排名工具
  • 网站开发服务公司关于友情链接说法正确的是
  • 攀枝花网站怎么做seo创新营销方式有哪些
  • 怎样做买东西的网站百度风云榜小说排行榜
  • 凡科专属网站免费注册品牌策划与推广方案
  • 哈尔滨市建筑市场监管信息平台多地优化完善疫情防控措施
  • 做网站需要学那些引擎优化seo是什么