curltest.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "curl/curl.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. int test_curl(const char* url)
  6. {
  7. CURL* curl;
  8. CURLcode r;
  9. char proxy[1024];
  10. int proxy_type = 0;
  11. if (getenv("HTTP_PROXY")) {
  12. proxy_type = 1;
  13. if (getenv("HTTP_PROXY_PORT")) {
  14. sprintf(proxy, "%s:%s", getenv("HTTP_PROXY"), getenv("HTTP_PROXY_PORT"));
  15. } else {
  16. sprintf(proxy, "%s", getenv("HTTP_PROXY"));
  17. }
  18. if (getenv("HTTP_PROXY_TYPE")) {
  19. /* HTTP/SOCKS4/SOCKS5 */
  20. if (strcmp(getenv("HTTP_PROXY_TYPE"), "HTTP") == 0) {
  21. proxy_type = 1;
  22. } else if (strcmp(getenv("HTTP_PROXY_TYPE"), "SOCKS4") == 0) {
  23. proxy_type = 2;
  24. } else if (strcmp(getenv("HTTP_PROXY_TYPE"), "SOCKS5") == 0) {
  25. proxy_type = 3;
  26. }
  27. }
  28. }
  29. curl = curl_easy_init();
  30. if (!curl) {
  31. fprintf(stderr, "curl_easy_init failed\n");
  32. return 1;
  33. }
  34. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  35. curl_easy_setopt(curl, CURLOPT_HEADER, 1);
  36. if (proxy_type > 0) {
  37. curl_easy_setopt(curl, CURLOPT_PROXY, proxy);
  38. switch (proxy_type) {
  39. case 2:
  40. curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
  41. break;
  42. case 3:
  43. curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
  44. break;
  45. default:
  46. curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
  47. }
  48. }
  49. curl_easy_setopt(curl, CURLOPT_URL, url);
  50. r = curl_easy_perform(curl);
  51. curl_easy_cleanup(curl);
  52. if (r != CURLE_OK) {
  53. fprintf(stderr, "error: fetching '%s' failed: %s\n", url,
  54. curl_easy_strerror(r));
  55. return 1;
  56. }
  57. return 0;
  58. }
  59. int main(int argc, const char* argv[])
  60. {
  61. int r;
  62. curl_global_init(CURL_GLOBAL_DEFAULT);
  63. if (argc == 2) {
  64. r = test_curl(argv[1]);
  65. } else {
  66. fprintf(stderr, "error: no URL given as first argument\n");
  67. r = 1;
  68. }
  69. curl_global_cleanup();
  70. return r;
  71. }