2

我编写了这个简单的代码来检查网络连接或我们的 iOS 应用程序:

int CL_Network::checkConnectionInt1(){

  CURL *curl;
  CURLcode res;
  curl = curl_easy_init();

  if (curl) {

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");

    res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    return res;

  }

  curl_easy_cleanup(curl);
  return -1;

}

我们的测试没问题,启用 Wi-Fi 时返回 0,但 Apple 审阅者在启用或禁用 Wi-Fi 时返回 23 (CURL_WRITE_ERROR)。

审稿人告诉我们其他奇怪的行为(考虑启用 Wi-Fi)

  • 装有 iOS 5.1 的 iPod touch 返回 0,与装有 iOS 6.3 的 iPhone5 相同的 Wi-Fi 返回 23
  • iPhone 5 with iOS 6.3 run step by step debug 返回 0(不知道是只发生一次还是一直发生)

你有什么建议吗?

最后一点,curl_easy_perform 的详细输出

  • 即将 connect() 到 www.google.com 端口 80 (#0)
  • 正在尝试 173.194.35.20...
  • 连接的
  • 连接到 www.google.com (173.194.35.20) 端口 80 (#0)

    GET / HTTP/1.1 主机:www.google.com 接受:/

< HTTP/1.1 302 找到 < 位置:http ://www.google.it/ < 缓存控制:私有 < 内容类型:文本/html;charset=UTF-8 < 设置 Cookie:PREF=ID=08f8ea131f5d39dd:FF=0:TM=1367680782:LM=1367680782:S=at5IyKNTpeoFFnif; expires=周一,2015 年 5 月 4 日 15:19:42 GMT;路径=/; 域=.google.com < 设置 Cookie:NID=67=uPKHTXNtVuYy4QOwVHstK4NzMGZcDssYW .....;过期=周日,2013 年 11 月 3 日 15:19:42 GMT;路径=/; 域=.google.com;HttpOnly < P3P: CP="这不是 P3P 政策!有关详细信息,请参阅 http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 。" < 日期:2013 年 5 月 4 日星期六 15:19:42 GMT < 服务器:gws < 内容长度:218 < X-XSS-Protection:1;mode=block < X-Frame-Options: SAMEORIGIN < 302 已移动

302 搬家了

文档已移至此处。* 到主机 www.google.com 的连接 #0 保持不变 * 关闭连接 #0 2013-05-04 17:19:42.183 testcurl[1468:c07] checkConnection 1:0

4

1 回答 1

0

您还需要编写一个 writecallback

size_t CurlWriteCallback(char* buf, size_t size, size_t nmemb, void* up)
{ 
    TRACE("CURL - Response received:\n%s", buf);
    TRACE("CURL - Response handled %d bytes:\n%s", size*nmemb);

    // tell curl how many bytes we handled
    return size*nmemb;
}

// ...



int CL_Network::checkConnectionInt1(){

  CURL *curl;
  CURLcode res;
  curl = curl_easy_init();

  if (curl) {

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &CurlWriteCallback);
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");

    res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    return res;

  }

  curl_easy_cleanup(curl);
  return -1;

}
于 2018-08-25T01:47:15.307 回答