一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法

php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法

2021-03-10 16:49ttibm PHP教程

這篇文章主要介紹了php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法,詳細分析了微信支付api.mch.weixin.qq.com域名解析慢原因與使用curl_easy_setopt指定ipv4解決ipv6解析問題的相關技巧,需要的朋友可以參考下

本文實例講述了php微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法。分享給大家供大家參考,具體如下:

微信支付api.mch.weixin.qq.com域名解析慢了,導致付款時非常的慢,那么要如何來解決微信支付慢的問題呢,這里就來一起分析一下。

有朋友在阿里云主機實現微信支付邏輯時,發現api.mch.weixin.qq.com的解析實在是太慢了。

因此出現了手動修改/etc/hosts的情況,當然了,哪天微信支付要是換個機房肯定要掛。

我們的機房也有相似的同題,專門記錄一下。

代碼里用curl來請求微信,經常超時,這時使用wget試驗:

?
1
2
3
[root@01 tmp]# wget api.mch.weixin.qq.com
--2016-06-18 14:51:03-- http://api.mch.weixin.qq.com/
Resolving api.mch.weixin.qq.com...

域名解析很久不出來

測試確認是ipv6問題

給wget加上-4,強制使用ipv4,如果很快,那基本上確定是ipv6惹的禍了。

?
1
2
3
4
[root@01 tmp]# wget -4 api.mch.weixin.qq.com
--2016-06-18 17:03:52-- http://api.mch.weixin.qq.com/
Resolving api.mch.weixin.qq.com... 123.151.71.149, 123.151.79.109
Connecting to api.mch.weixin.qq.com|123.151.71.149|:80... connected.

代碼分析

專門寫個代碼來測試ipv6的解析,用到系統函數getaddrinfo:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <iostream>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
using namespace std;
int main() {
  struct addrinfo hints,*answer,*curr,*p;
  int error;
  memset(&hints, 0, sizeof hints);
  hints.ai_family = AF_INET6;//AF_UNSPEC; // use AF_INET6 to force IPv6
  hints.ai_socktype = SOCK_STREAM;//SOCK_DGRAM; // SOCK_STREAM
  if ((error = getaddrinfo("api.mch.weixin.qq.com", NULL, &hints, &answer)) != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(error));
    return 1;
  } else cout <<"Success with a URL\n";
  char ipstr[16];
  for (curr = answer; curr != NULL; curr = curr->ai_next) {
    inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr),ipstr, 16);
    printf("%s\n", ipstr);
  }
  freeaddrinfo(answer);
  return 0;
}

包含頭文件

netdb.h

函數原型:

int getaddrinfo( const char hostname, const char service, const struct addrinfo *hints, struct addrinfo **result );

參數說明:

hints:可以是一個空指針,也可以是一個指向某個addrinfo結構體的指針,調用者在這個結構中填入關于期望返回的信息類型的暗示。舉例來說:如果指定的服務既支持TCP也支持UDP,那么調用者可以把hints結構中的ai_socktype成員設置成SOCK_DGRAM使得返回的僅僅是適用于數據報套接口的信息。而是否ipv6則由ai_family決定。
result:本函數通過result指針參數返回一個指向addrinfo結構體鏈表的指針。

返回值:0——成功,非0——出錯

測試結果:

ai_family為ipv6時,只會尋找ipv6的解析結果,一般域名也沒設置。ai_family為AF_UNSPEC時,會先ipv6再ipv4的,而api.mch.weixin.qq.com這個域名的ipv6解析出奇的慢(qq.com卻不慢,原因見后)。

解決辦法:

如果是curl,c可以強制指定ipv4,使用curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

其他語言的也參考此法。

深層原因分析

nslookup -query=AAAA api.mch.weixin.qq.com -debug 是找不到解析的(指定的AAAA就是ipv6),然后會發現一個SOA聲明和他的上級weixin.qq.com有一個ipv6的CNAME,到了minorshort.weixin.qq.com,而這域名又是沒有ipv6的解析的。

目測ipv6找解析時是在這個SOA和CNAME的地方打圈了,微信的同學們是不是考慮讓大伙好過一點,把這些個域名的ipv6設置去掉。

?
1
2
dig @ns-tel1.qq.com weixin.qq.com AAAA
weixin.qq.com.    43200  IN  SOA ns-tel1.qq.com. webmaster.qq.com. 1293502040 300 600 86400 300

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品国产在线观看 | 黑人粗长大战亚洲女 | 久久综合老色鬼网站 | 青草碰人人澡人人澡 | 国产亚洲精品九九久在线观看 | 男人操女人免费视频 | 性色欲情网站IWWW九文堂 | 欧美一级视频在线 | 4hc44四虎永久地址链接 | 九九精品视频在线免费观看 | 欧美性videossex丝袜 | 国产欧美一区二区精品性色 | 日本mv精品中文字幕 | 国产免费成人在线视频 | 国产成人综合一区精品 | 好湿好紧好大野战 | 欧洲第一页 | 忘忧草在线社区WWW日本直播 | 古装全套 毛片 | 国产成人综合一区精品 | 美女毛片在线 | 精品精品国产yyy5857香蕉 | 古代翁熄乩伦小说h | 强制高h| 亚飞与亚基高清国语在线观看 | 99ri在线视频网 | 三年片韩国在线观看 | 日本艳鉧动漫1~6在线观看 | 久久电影精品久久99久久 | 久久婷婷五月综合色丁香花 | 欧美精品久久久久久久影视 | 亚洲29p | 国产动作大片 | 天天av天天翘天天综合网 | freexxx性欧美3d动漫 | 国产在线观看91 | 精品手机在线视频 | 美女扒开两腿露出尿口的视频 | 日本美女动态图片 | 91porn最新网址 | 成人观看免费观看视频 |