当URL包含点或冒号时,PHP curl请求导致白页

时间:2019-01-13 11:29:19

标签: php curl php-curl

这仅在我的Web服务器上发生,而不在本地系统上发生。 我有这样的卷曲请求

#include <stdint.h>
#include <stddef.h>
#include <string.h>

enum { OK, ERROR };


template <class T>
class WaitingQueue
{
   struct QueueElement
   {
      public:
      T                   data;
      QueueElement       *next;

      QueueElement(T *pdata): next(0)
      {
          memcpy(&data, pdata, sizeof(T));
      }
    };

    QueueElement *head, tail;

    public:
    bool (*comparefunc)(uint16_t, T*);
    WaitingQueue (bool (*compareFunction)(uint16_t, T*)) :comparefunc(compareFunction), head(0), tail(0) { }

  int search(int16_t id, T *ret_data)
  {
      QueueElement *temp = head;
      QueueElement *prev = 0;

      if (temp != NULL)
      {
          if (comparefunc(id, &temp->data) == true)
          {
              if (prev)
              {
                  prev->next = temp->next;
              }
              else
              {
                 head = head->next;
              }

              memcpy(ret_data, &temp->data, sizeof(temp->data));
              delete temp;
              return OK;
          }
          prev = temp;
          temp = temp->next;
      }
      return ERROR;
  }
};

typedef struct _cmd
{
  uint8_t flags; 
  uint16_t id; 
} cmd;

bool compare(uint16_t id, cmd *cmd)
{
    return (cmd->id == id);
}

class foo
{
   WaitingQueue<cmd> queue(compare);
};

这会使页面加载一段时间,并仅返回白屏。真的不可能显示错误,输出或其他任何内容。

每当我将网址更改为另一个网址(存在或不存在)时,只要该网址有意义,只要该网址不包含任何点或冒号,我都会得到适当的错误或输出...

我对使用或curlopt是否有任何限制? 我无法控制目标网址,我需要使用ip:port结构中的api。

更新

  1. 该问题与目标URL或传入的数据无关:当我输入一个只要其中不包含任何意义的URL时,都会发生相同的问题。或:
  2. 我想这是Web服务器上的一项设置,因为我所有的测试都可以在localhost(MAMP)上正常工作
  3. 很遗憾,除了我自己上传的日志或文件(one.com虚拟主机)之外,我无权访问任何日志或文件

更新2

事实证明,我的主机正在阻止所有传向除80和443之外的隐式IP和端口的传出流量。 取消了我的订阅,现在接受了一家不错的提供商。 感谢您的帮助

2 个答案:

答案 0 :(得分:1)

按照@Quasimodo的建议,如果我是您,那么我将在日志文件中进行查看。如果您在使用Apache的Ubuntu服务器上,请查看/var/log/apache2/error.log。一个巧妙的技巧是打开终端并输入:

tail -f /var/log/apache2/error.log

这将打开一个正在运行的流到终端。然后,您可以使curl-request崩溃(在浏览器中),然后返回到终端,查看收到了哪些新错误和多汁错误。

很可能是服务器上的一些配置文件。因此,如果您从该服务器编写一些规范,将很有帮助,例如:  -您使用的是哪个Web服务器(Apache,Nginx等)  -PHP版本 ...您可以使用phpinfo轻松找到所有这些信息。

我的最佳猜测是,您需要enable PHP_Curl来配置服务器,但是-这是从臀部射出的野蛮牛仔。

加法1

我可以看到您刚刚编辑了问题(它会思考一会儿,然后显示一个空白屏幕)。我想说,您的curl请求可能正在尝试加载大量数据,并且您的PHP配置的上限为128mb(或其他)。

我将检查PHPinfo的这两个值:

max_input_vars
memory_limit

查看它们中的任何一个是否低得可疑。

答案 1 :(得分:0)

结果是,我的托管服务提供商阻止所有传出流量到隐式IP和80和443以外的其他端口。取消了我的订阅,现在选择了一家不错的提供商。感谢您的帮助