最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年10月12日 11:16:49   作者:ttibm  
這篇文章主要介紹了php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法,詳細分析了微信支付api.mch.weixin.qq.com域名解析慢原因與使用curl_easy_setopt指定ipv4解決ipv6解析問題的相關(guān)技巧,需要的朋友可以參考下

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

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

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

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

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

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

[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惹的禍了。

[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的解析,用到系統(tǒng)函數(shù)getaddrinfo:

#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

函數(shù)原型:

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

參數(shù)說明:

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

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

測試結(jié)果:

ai_family為ipv6時,只會尋找ipv6的解析結(jié)果,一般域名也沒設(shè)置。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),然后會發(fā)現(xiàn)一個SOA聲明和他的上級weixin.qq.com有一個ipv6的CNAME,到了minorshort.weixin.qq.com,而這域名又是沒有ipv6的解析的。

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

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

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP微信開發(fā)技巧匯總》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

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

相關(guān)文章

  • wordpress之wp-settings.php

    wordpress之wp-settings.php

    wordpress之wp-settings.php...
    2007-08-08
  • php采集中國代理服務(wù)器網(wǎng)的方法

    php采集中國代理服務(wù)器網(wǎng)的方法

    這篇文章主要介紹了php采集中國代理服務(wù)器網(wǎng)的方法,涉及php采集的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • php計算整個目錄大小的方法

    php計算整個目錄大小的方法

    這篇文章主要介紹了php計算整個目錄大小的方法,涉及php遞歸遍歷與文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • fleaphp crud操作之findByField函數(shù)的使用方法

    fleaphp crud操作之findByField函數(shù)的使用方法

    fleaphp crud操作之findByField函數(shù)的用法分享,需要的朋友可以參考下。
    2011-04-04
  • PHP中實現(xiàn)中文字符進制轉(zhuǎn)換原理分析

    PHP中實現(xiàn)中文字符進制轉(zhuǎn)換原理分析

    中文字符編碼研究系列第四期,PHP實現(xiàn)中文字符進制轉(zhuǎn)換原理分析,主要討論中文漢字轉(zhuǎn)換為十進制和十六進制的方法,并掌握轉(zhuǎn)換原理應(yīng)用于實際開發(fā)。本文以GBK編碼字符為例,討論GBK編碼的字符轉(zhuǎn)換原理
    2011-12-12
  • 詳解thinkphp的Auth類認證

    詳解thinkphp的Auth類認證

    Auth類已經(jīng)在ThinkPHP代碼倉庫中存在很久了,但是因為一直沒有出過它的教程,很少人知道它,它其實比RBAC更方便。本文帶著大家來詳細了解它。
    2021-05-05
  • 詳細對比php中類繼承和接口繼承

    詳細對比php中類繼承和接口繼承

    在本文里我們給大家詳細對比了php中類繼承和接口繼承的不同之處,有興趣的朋友們學(xué)習(xí)下。
    2018-10-10
  • PHP 解決utf-8和gb2312編碼轉(zhuǎn)換問題

    PHP 解決utf-8和gb2312編碼轉(zhuǎn)換問題

    就一個很簡單的函數(shù)iconv();但是就是這個函數(shù)在網(wǎng)上找了很多例子,都無法成功轉(zhuǎn)換,這是為什么呢?
    2010-03-03
  • PHP閉包函數(shù)詳解

    PHP閉包函數(shù)詳解

    這篇文章主要為大家詳細介紹了PHP閉包函數(shù),閉包函數(shù)沒有函數(shù)名稱,直接在function()傳入變量即可 使用時將定義的變量當(dāng)作函數(shù)來處理,對PHP閉包函數(shù)感興趣的朋友可以參考一下
    2016-02-02
  • java模擬PHP的pack和unpack類

    java模擬PHP的pack和unpack類

    這篇文章主要介紹了java模擬PHP的pack和unpack類的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評論

西峡县| 乐昌市| 朔州市| 林西县| 沙雅县| 郧西县| 伊宁县| 新沂市| 隆昌县| 星座| 防城港市| 弋阳县| 泾川县| 正阳县| 石楼县| 科尔| 柳林县| 哈巴河县| 奉新县| 东方市| 通江县| 麻栗坡县| 山阴县| 宣威市| 彰化县| 车险| 涿鹿县| 曲阳县| 塘沽区| 山阴县| 通海县| 陆川县| 宣化县| 郓城县| 靖江市| 饶河县| 健康| 宝坻区| 格尔木市| 微博| 永嘉县|