Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twitter requests.exceptions.ChunkedEncodingError:(';连接断开:未完成读取(读取0个字节,预期会多读取512个字节)';未完成读取_Twitter_Python Requests_Sentiment Analysis_Chunked Encoding - Fatal编程技术网

Twitter requests.exceptions.ChunkedEncodingError:(';连接断开:未完成读取(读取0个字节,预期会多读取512个字节)';未完成读取

Twitter requests.exceptions.ChunkedEncodingError:(';连接断开:未完成读取(读取0个字节,预期会多读取512个字节)';未完成读取,twitter,python-requests,sentiment-analysis,chunked-encoding,Twitter,Python Requests,Sentiment Analysis,Chunked Encoding,我想写一个程序,从Twitter上获取推文,然后进行情绪分析。我写了以下代码,即使导入了所有必要的库,也出现了错误。我对数据科学比较陌生,请帮助我。 我无法理解此错误的原因: class TwitterClient(object): def __init__(self): # keys and tokens from the Twitter Dev Console consumer_key = 'XXXXXXXXX' consumer_secret = 'XXXXX

我想写一个程序,从Twitter上获取推文,然后进行情绪分析。我写了以下代码,即使导入了所有必要的库,也出现了错误。我对数据科学比较陌生,请帮助我。 我无法理解此错误的原因:

class TwitterClient(object):


def __init__(self):

    # keys and tokens from the Twitter Dev Console
    consumer_key = 'XXXXXXXXX'
    consumer_secret = 'XXXXXXXXX'
    access_token = 'XXXXXXXXX'
    access_token_secret = 'XXXXXXXXX'
    api = Api(consumer_key, consumer_secret, access_token, access_token_secret)

    def preprocess(tweet, ascii=True, ignore_rt_char=True, ignore_url=True, ignore_mention=True, ignore_hashtag=True,letter_only=True, remove_stopwords=True, min_tweet_len=3):
        sword = stopwords.words('english')

        if ascii:  # maybe remove lines with ANY non-ascii character
            for c in tweet:
                if not (0 < ord(c) < 127):
                    return ''

        tokens = tweet.lower().split()  # to lower, split
        res = []

        for token in tokens:
            if remove_stopwords and token in sword: # ignore stopword
                continue
            if ignore_rt_char and token == 'rt': # ignore 'retweet' symbol
                continue
            if ignore_url and token.startswith('https:'): # ignore url
                continue
            if ignore_mention and token.startswith('@'): # ignore mentions
                continue
            if ignore_hashtag and token.startswith('#'): # ignore hashtags
                continue
            if letter_only: # ignore digits
                if not token.isalpha():
                    continue
            elif token.isdigit(): # otherwise unify digits
                token = '<num>'

            res += token, # append token

        if min_tweet_len and len(res) < min_tweet_len: # ignore tweets few than n tokens
            return ''
        else:
            return ' '.join(res)

    for line in api.GetStreamSample():            
        if 'text' in line and line['lang'] == u'en': # step 1
            text = line['text'].encode('utf-8').replace('\n', ' ') # step 2
            p_t = preprocess(text)

    # attempt authentication
    try:
        # create OAuthHandler object
        self.auth = OAuthHandler(consumer_key, consumer_secret)
        # set access token and secret
        self.auth.set_access_token(access_token, access_token_secret)
        # create tweepy API object to fetch tweets
        self.api = tweepy.API(self.auth)
    except:
        print("Error: Authentication Failed")
我试着在互联网上查找错误的原因,但找不到任何解决方案

错误是:

requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read, 512 more expected)', IncompleteRead(0 bytes read, 512 more expected))

我使用的是Python 2.7和最新版本的请求2.14。

如果在发出请求时将stream设置为True,则请求无法释放回池的连接,除非您使用所有数据或调用Response.close。这可能会导致连接效率低下。如果您发现自己部分读取了请求正文(或者根本不读取它们)使用stream=True时,您应该在with语句中发出请求,以确保它始终处于关闭状态:

with requests.get('http://httpbin.org/get', stream=True) as r:
    # Do things with the response here.

我也有同样的问题,但没有流,正如stone mini所说,只需在之前应用“with”子句,以确保在新请求之前关闭您的请求

    with requests.request("POST", url_base, json=task, headers=headers) as report:
        print('report: ', report)

实际上,基于django 2.7或更早版本的应用程序存在问题。默认情况下,django版本允许请求正文的内存大小为2.5mb

我在基于django 2.7的应用程序中也遇到了同样的问题,我刚刚更新了django应用程序的setting.py文件,我的URL(端点)在该文件中工作

DATA_UPLOAD_MAX_MEMORY_SIZE = None
我只是在应用程序的settings.py文件中添加了上述变量。 你也可以从


我很确定这对你会有用。

对于那些像我一样只想避免错误并重新尝试连接的人,类似的东西可能会有所帮助

r = ''
while r == '':
    try:
        r = requests.get(Url, headers = headers)
    except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError) as err:
        log_(err + ' Put to sleep before retrying.')
        time.sleep(100)
        continue

这将捕获连接错误,例如
ConnectionError
ChunkedEncodingError
,将脚本置于睡眠状态(如本例所示,持续100秒)然后重试连接。请注意,如果连接中断错误持续存在,上述脚本将无限次尝试…在尝试太长时间之前,您可能希望添加一个计数器来停止它。

请考虑该问题不包含任何对
请求的引用。get
,并且您的答案可能很难输入context.我同意上面的评论,但这对我有效!嗨,我也有同样的问题,但我不太明白如何从上面的评论中修复它。有人能举个例子吗:-),我正在使用Twithon…我的实现已经使用了一个
with
子句,但是我仍然得到分块编码错误,所以我不认为这是问题的根源根据Django的文档,这只与服务器接收的POST请求相关(这是为了防止第三方上传可疑文件的安全措施)。由于OP正在下载推文,我猜他们使用的是GET请求,所以这不会有帮助
r = ''
while r == '':
    try:
        r = requests.get(Url, headers = headers)
    except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError) as err:
        log_(err + ' Put to sleep before retrying.')
        time.sleep(100)
        continue