curltest.c 2.0 KB

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